日期:2014-05-20  浏览次数:20779 次

帮忙解释下synchronized、wait和notify
涉及到线程同步问题,这三个词弄不明白了,

高手给讲解下,举例更好。

谢谢。

------解决方案--------------------
wait 是 object 的方法,使当前线程出于“不可运行”状态。调用 object.wait ()时,线程先要获取这个对象的对象锁,当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用 object.notify (),这样将唤醒原来等待中的线程,然后释放该锁。wait /notify 需要获取对象锁。


------解决方案--------------------
synchronized是同步线程,凡进入此修饰的代码,共同访问的资源就会被锁定。这个东西通常和wait和notify使用,因为wait会将线程放入线程池处于等待状态,只有通过notify唤醒。
但wait不想sleep和suspended同是对线程等待停止执行,但是wait却可以释放同步锁。就是synchronized。
所以通常情况下,wait用在synchronized内使用。
------解决方案--------------------
1、wait、notify必须在synchronized块中使用;
2、wait 阻塞当前线程,但会释放资源锁;
3、wait 后当前线程进入到等待队列,其他线程调用notify后当前线程进入就绪状态,获得cpu时间 后可以继续执行
------解决方案--------------------
synchronized是线程中的同步锁。在同步代码块和同步方法中应用
wait()是Object中的方法,用于线程等待
notify()也是Object中的方法,用于线程唤醒