(五十二)sleep()与wait()方法区别

一、对锁的处理机制不同

sleep()方法:不释放锁

正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往下执行,不涉及线程间的通信(注意:sleep方法只让出了CPU,而并不会释放同步资源锁!!!);

你想要让当前线程不考虑其他线程的感受,只是自己暂时不干活而已

wait()方法:释放锁

wait()方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify()方法,之前调用wait()的线程才会解除wait状态,可以去参与竞争同步资源锁,进而得到执行。(注意:notify的作用相当于叫醒睡着的人,而并不会给他分配任务,就是说notify只是让之前调用wait的线程有权利重新参与线程的调度);
 

二、使用区域不同

sleep()方法可以在任何地方使用;

wait()方法则只能在同步方法或同步块中使用

三、原理不同

sleep()方法是Thread类的静态方法,是线程用来控制自身流程的,它会使此线程暂停执行一段时间,而把执行机会让给其他线程,等到时间一到,此线程会自动“苏醒”

wait()方法是Object类的方法,用来线程间的通信,这个方法会使当前拥有该对象锁的线程等待,直到其他线程调用notify()方法。(wait---notify是成对出现的)

 

四、使用选择

sleep()方法并不会释放锁标志,容易造成死锁情况。因此,一般情况下,不推荐用sleep(),而应用wait()

 

 

 

 

posted @ 2019-03-19 20:51  测试开发分享站  阅读(118)  评论(0编辑  收藏  举报