如何证明sleep不释放锁,而wait释放锁?
1、首先调用wait方法
代码内容大致是某人上厕所,然后在等别人送纸(wait for paper)。
另一个人上门送纸(give paper),接收到纸后完成清洁(finish clean)。
Object lock = new Object();
new Thread(() ->{
synchronized (lock) {
System.out.println("wait for paper......");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("finish clean......");
}
}).start();
new Thread(() ->{
synchronized (lock) {
System.out.println("give paper......");
lock.notify();
}
}).start();
2、运行结果是:
wait for paper......
give paper......
finish clean......

3、修改lock.wait()变为Thread.sleep(1000)
代码内容就变为某人上厕所,然后在等别人送纸(wait for paper)。
另一个人上门送纸(give paper),但是厕所门没开,厕所里的人清洁(finish clean)完后才收到纸。
Object lock = new Object();
new Thread(() ->{
synchronized (lock) {
System.out.println("wait for paper......");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("finish clean......");
}
}).start();
new Thread(() ->{
synchronized (lock) {
System.out.println("give paper......");
lock.notify();
}
}).start();
4、运行结果是:
wait for paper......
finish clean......
give paper......

5、上述两个运行结果证明了wait会先释放锁,而sleep不会释放锁。
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:130
阅读量:111
阅读量:70
阅读量:193
阅读量:58