锁定义在object类,而不是Thread类
wait(), notify() synchronized会对锁进行操作,wait()使当前线程等待,释放所持有的锁,通过notify()唤醒其他的等待线程,是谁唤醒他们的呢?是“唤醒线程”,它只有获得操作对象的锁,才能去唤醒等待线程,此时等待线程还不能运行,这就需要唤醒线程释放持有的锁,其他线程才能获得锁去执行。wait(),notify()依赖锁,而锁是对象持有的,而对象有且只有一个。
wait(), notify(), notifyAll()
wait()会释放锁
join()
打断当前正在运行的线程,运行join的线程,不会释放锁,直到运行完毕或到时间
sleep(), yield()
都不会释放锁。
sleep会使当前线程休眠,放弃当前的cpu时间片,直至到时间
yield会使当前线程让步,放弃当前cpu时间片,OS重新选择线程,不保证“一定让出”,所有线程同时抢
本文深入探讨了Java中线程间的通信机制,重点讲解了wait(), notify() 和 notifyAll() 方法如何与锁协同工作,实现线程间的同步与唤醒。文章解析了这些方法在对象锁上的作用,以及它们如何帮助解决线程间的竞争条件。
763

被折叠的 条评论
为什么被折叠?



