黑马程序员技术交流社区
标题:
线程锁的问题。
[打印本页]
作者:
袁园
时间:
2012-11-24 09:21
标题:
线程锁的问题。
一个有线程锁的函数,但是里边又要用sleep 不是就把锁给打乱了 还是整个cup都等睡眠时间过了以后才开始执行?
public synchronized void run(){
sleep(1000);
}
作者:
陈郊
时间:
2012-11-24 09:32
这个没有关系,线程锁是指多个线程在执行同一代码块的时候,保证他们能单独的执行,不互相之间影响.比如说当线程A进入同步函数它就持有当前对象的字节码文件对象的锁.其他线程想要执行这些代码,就只有等他释放了这把锁,才能有机会去执行.
就好像你去上厕所,只有等厕所里面的人出来了就才嫩进去一样.
作者:
李有
时间:
2012-11-24 09:33
这个线程拿到了锁,那么它就是运行状态,其他线程就是就绪状态。他sleep了,但是锁没有释放啊,那么其他线程也没有拿到锁,只能等啊,那么就还是就绪状态啊。并不是说CPU睡着了,而是线程。
毕老师的经典例子嘛,火车里的厕所。
这人拿到锁,进去后转动锁,锁上面写上‘有人’,但是这人一转身被熏晕了,那他就SLEEP了。厕所是CPU,厕所是不会sleep的。
那么外面的人只能等着,呵呵!!外面的人就是就绪状态。
作者:
邢晏玮
时间:
2012-11-24 10:32
public synchronized void run(){ //这句话的意识是说告诉其他的线程我已经进来,其他的线程看见已经被锁上了 就不能再进去了
sleep(1000); //而这句话是说进去了之后,让自己休眠1000毫秒,休眠之后,它再运行,
} //其实并没与混乱的,因sleep是指对当前线程做的动作,而synchornized是其实线程锁,也就是说,一个线程执行了另外一个线程就没办法去执行,只能进行等待,钱一个线程执行完另外的才能进去执行
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2