黑马程序员技术交流社区
标题:
关于线程锁的问题
[打印本页]
作者:
蒋映辉
时间:
2012-5-10 10:44
标题:
关于线程锁的问题
一个有线程锁的函数,但是里边又要用sleep 不是就把锁给打乱了 还是整个cup都等睡眠时间过了以后才开始执行?
public synchronized void run(){
sleep(1000);
}
作者:
李啸
时间:
2012-5-10 10:48
意思就是在cpu睡1秒钟的时候谁都全部线程都不允许执行
作者:
徐然
时间:
2012-5-10 13:31
还是锁的问题,
你要知道,一个线程拿到锁以后,没有释放锁,其他线程在哪
肯定是在等着拿到锁的线程释放锁,
拿到锁的线程sleep了,并没有释放锁,并不影响其他线程的状态
作者:
韩慧阳
时间:
2012-5-10 14:49
这个线程拿到了锁,那么它就是运行状态,其他线程就是就绪状态。他sleep了,但是锁没有释放啊,那么其他线程也没有拿到锁,只能等啊,那么就还是就绪状态啊。并不是说CPU睡着了,而是线程。
毕老师的经典例子嘛,火车里的厕所。
这人拿到锁,进去后转动锁,锁上面写上‘有人’,但是这人一转身被熏晕了,那他就SLEEP了。厕所是CPU,厕所是不会sleep的。
那么外面的人只能等着,呵呵!!外面的人就是就绪状态。
作者:
蒋映辉
时间:
2012-5-10 15:57
恭喜楼上的人 跟我的想法一样 但是经过测试 这个想法是错误的。
class T2 extends Thread{
public synchronized void run(){
System.out.println("1");
try {
sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("1");
}
}
class T3 extends Thread{
public synchronized void run(){
System.out.println("9");
try {
sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("8");
}
}
public class T1 {
public static void main(String[] args) {
T2 t=new T2();
t.start();
T3 t3=new T3();
t3.start();
}
}
复制代码
上面代码的输出结果是 1,9 然后过一会才输入2 8也就是说 该上厕所的还是上了
作者:
黄坚声
时间:
2012-5-10 16:22
当程序执行到sleep(1000)时候,其所在的线程会休眠一秒钟。
作者:
黄坚声
时间:
2012-5-10 16:24
有些问题不要过多纠结,想我那样理解就ok了。
当程序执行到sleep(1000)时候,其所在的线程会休眠一秒钟,其任务也暂停一秒。
作者:
蒋映辉
时间:
2012-5-10 16:50
黄坚声 发表于 2012-5-10 16:24
有些问题不要过多纠结,想我那样理解就ok了。
当程序执行到sleep(1000)时候,其所在的线程会休眠一秒钟,其 ...
呵呵 我就是这样理解导致写代码的时候出错了啊 你会遇到这样情况的 到时候你就懂了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2