前言

简单记录一下wait()和notify()等相关内容,记录于此,方便自己查阅。

正文

wait方法

主要工作

  • 使当前执行代码的线程进行等待。(把线程放到等待队列中)

  • 释放当前的锁

  • 满足条件被notify()唤醒,重新尝试获取这个锁

方法介绍

有两个方法,一个有参数,一个无参数。

  1. wait()

    让当前线程进入等待(阻塞)状态。死等,没有唤醒就会一直阻塞。

  2. wait(long timeout)

    指定时间内,让线程进入等待(阻塞)状态。

结束条件
  1. 其他线程调⽤该对象的notify⽅法。

  2. wait(long timeout)等待过了timeout时间,超时释放。

  3. 其他线程调⽤该等待线程的interrupt⽅法,导致wait 抛出 InterruptedException异常,并清除中断标志位,并重新尝试获取锁。

notify()

notify⽅法是唤醒等待的线程,主要配合wait()。

主要工作

  1. ⽅法notify()是通知等待该对象的对象锁的其它线程,对其发出通知notify,并使它们重新获取该对象的对象锁。

  2. 如果有多个线程等待,则有线程调度器随机挑选出⼀个呈 wait 状态的线程。(并没有 “先来后到”)

  3. 在notify()⽅法后,当前线程不会⻢上释放该对象锁,要等到执⾏notify()⽅法的线程将程序执⾏完,也就是退出同步代码块之后才会释放对象锁。

方法介绍
  1. notify()

    唤醒同一对象调用正在wait()的线程,如果有多个线程正在wait()就会随机唤醒一个线程

  2. notifyAll()

    唤醒所有正在wait()的线程。

参考文章

  1. JAVA-wait()和notify()

 历史上的今天

  1. wait()和notify()简单记录

相关文章

暂无评论

none
暂无评论...