(五十二)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()