点这里
点这里
因为在java中,wait(),notify()和notifyAll()属于锁级别的操作,而锁是属于某个对象的。
Thread也是个对象,这样调用也没有问题,但是Thread是个特殊的对象,线程退出的时候会自动执行notify,这样会是我们设计的流程受到干扰,所以我们一般不这么用。
唤醒多个线程和一个线程的区别。
没抢到锁的线程处于等待状态,等待锁的释放。
这两个方法被弃用了,推荐使用wait、notify。
sleep方法可以让线程进入Waiting状态,并且不占用CPU资源,但是不释放锁,直到规定时间后再执行,休眠期间如果被中断,会拋出异常并清除中断状态。
相同点
wait和sleep方法都可以使线程阻塞,对应线程状态是Waiting或Time_Waiting。wait和sleep方法都可以响应中断Thread.interrupt()。不同点
wait方法的执行必须在同步方法中进行,而sleep则不需要在同步方法里执行sleep方法时,不会释放monitor锁,但是wait方法会释放monitor锁。sleep方法短暂休眠之后会主动退出阻塞,而没有指定时间的wait方法则需要被其他线程中断后才能退出阻塞。wait()、notify()和notifyAll()是Object类的方法, sleep()和yeild()是Thread类的方法。笔记来源:慕课网悟空老师视频《Java并发核心知识体系精讲》
