问题描述
创建了一个对象A,A中有一个线程B和一个公共过程CC中包含了一条thread.sleep(100)语句,B线程在执行过程中调用了C,那么这时C中的thread.sleep语句的是否仅对B线程起作用?如果在创建A的主进程中调用A的C过程,那么C中的thread.sleep的作用范围是那个?
解决方案
解决方案二:
微软的MSDN解释为:‘将当前线程阻塞指定的毫秒数’也就是它作用于那个执行thread.sleep命令的线程。
解决方案三:
Sleep是阻塞代码所执行的“当前线程”的。代码有两个概念,一个是指它的静态形式,另一个是加载到内存中之后被线程上下文指针所引用的“影像”。这里显然是指后者。
解决方案四:
实际上就是执行到sleep,代码会阻塞在这里一定时间,再继续执行那么当然是哪个线程去调用它,哪个线程就被阻塞了,跟别的线程没有关系
解决方案五:
这东西很难理解吗?好比你在函数里写了个while(true)死循环那么到底是哪个线程陷入死循环?当然是你用哪个线程去调用这个函数,哪个线程就陷入死循环了
解决方案六:
如果在创建A的主进程中调用A的C过程,那么C中的thread.sleep的作用范围是那个?说白了就是,程序里定义了对象(class),哪个线程都可以去用它,哪个线程用它就Sleep谁。
解决方案七:
说简单一些阻塞是当前调用他的线程,也就是B线程调用C函数时执行到Sleep,B线程就被阻塞,同样A调用也会阻塞A线程
解决方案八:
这就好比玩大富翁的时候,有个格子里写上:休息一轮那么当然是谁走到这个格子里,谁就休息,跟别人没有关系大富翁的棋盘相当于代码而4个玩家是线程同样的代码,4个线程分别执行的时候,可能执行顺序完全都不一样的
解决方案九:
谁调用C,谁就暂停。A调用的时候A会sleep,B调用的时候B会sleep。
解决方案十:
引用8楼SPFarm的回复:
谁调用C,谁就暂停。A调用的时候A会sleep,B调用的时候B会sleep。
最简单明了的答案