wait、notify、notifyAll

本文总结下wait、notify、notifyAll,其实是为了试试markdown。。。

wait

  • 释放所持有的锁,线程阻塞。

  • 能释放,那必须先持有,和synchronized配合使用。

  • 线程调用wait方法,会进入锁对象的等待池,等待被唤醒。

  • 由于线程进入等待,需要捕获InterruptedException,防止被打断,无法继续进行。

notify

  • 线程释放,唤醒锁对象等待池中的一个线程,操作系统决定具体唤醒哪个线程。

  • 能释放锁,必然先持有锁,wait、notify、synchronized配套出现。

  • 释放当前锁,但是不是立马释放,而是把notify后的代码执行完,直到同步块结束。

notifyAll

  • 基本同notify,区别就是notify指唤醒一个线程,notifyAll唤醒所有锁对象的等待线程,竞争锁。

注意点

  • 必须一个线程wait后,另一个线程调用notify/notifyAll才能唤醒前一个线程。如果顺序错了,则无法唤醒

  • 当同步块中有判断条件时,需要使用while,而不能使用if。因为线程唤醒后,原来满足的条件此时可能已经不满足了,需要再次判断。

  • noitfy/notifyAll调用后,线程不会立即释放锁,会将同步块的代码执行完才释放。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章