java多线程(四)wait() notify() notifyall()

来源:互联网 发布:金川公司网络学校2017 编辑:程序博客网 时间:2024/06/05 15:36

wait()、notify()和notifyAll()是Object类中的方法(必须写在Synchronized里面

  1)wait()、notify()和notifyAll()方法是本地方法,并且为final方法,无法被重写。

  2)调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的monitor(即锁),调用后将会出让该锁

  3)调用某个对象的notify()方法能够唤醒一个正在等待这个对象的monitor的线程,如果有多个线程都在等待这个对象的monitor,则只能唤醒其中一个线程;并不保证哪个线程能够取得该锁。

  4)调用notifyAll()方法能够唤醒所有正在等待这个对象的monitor的线程;

尤其要注意一点,一个线程被唤醒不代表立即获取了对象的monitor,只有等调用完notify()或者notifyAll()并退出synchronized块,释放对象锁后,其余线程才可获得锁执行。