@TOC
从四个方面理解sleep方法和wait方法的不同
(1)类上的不同
sleep方法是属于Thread类中的方法,要使用该方法就必须得继承Thread或实现接口Runable。而wait方法是属于Object类中的方法。
(2)方法调用上的不同
在方法的调用上,sleep是一个静态方法,通过类名调用。wait不是静态方法,通过对象来调用
(3)唤醒线程的方式不同
列如:在线程调用sleep(2000),则表示调用该方法的线程则会停止工作2秒,停止的期间不会释放锁,2秒过后自动继续开始执行未完的任务,无需有人去唤醒它。但是wait不同,如wait(2000),则表示当前哪个线程调用它,则该线程会停止工作2秒,停止的期间会释放锁,2秒过后不会自动继续执行未完成的任务,需要人为的调用Object方法中的notify/notifyAll方法来唤醒它,但唤醒后也只是进入就绪状态,直到有CPU资源才重新运行。
(4)sleep和wait进行执行锁的过程理解不同
sleep方法是哪个位置调用,就哪个线程等待。wait方法是对象调用时,访问对象的其他线程等待。
如:对象.wait()的时候并不是该对象会进行线程等待,而是访问当前这个对象的线程进行等待。
类.sleep()的时候则是这个类的对象进行睡眠等待,而不是访问线程进行等待。
举个例子就如:A和B去商店买东西,此时商店调用了sleep方法,就表示商店自己暂时打烊了,如果此时商店调用的是wait方法的话,正好A此时来买东西,商店让A进行等待。