您的位置 首页 java

java线程间的通信-wait()、notify()、notifyAll()详解及案例

^_^关注收藏点赞,每天查看更新。

摘要:在 Java多线程同步(synchronization)—两种方法同步代码块 案例中无条件的阻塞了其他线程异步访问某个方法,其他线程处于等待状态,这样浪费了CPU资源。理想的情况下,让线程处于运作状态,节约CPU时间。所以,java包含了通过wai(),notify()和notifyAll() 方法实现进程间的通信机制。这些方法对象中是用final 方法实现的,所以所有的类都包含它们,这三个方法仅在 synchronized 方法中才能被调用。

  1. wait():告知被调用的线程放弃进入管程进入休眠直到其他线程进入相同管程并且调用notify();

  2. notify():恢复相同对象中第一个调用wait()的线程;

  3. notifyAll():恢复相同对象中所有调用wait()的线程,具有最高优先级的线程最先运行。

这些方法在Object中被声明,如下所示:

  • final void wait() throws InterruptedException

  • final void notify()

  • final void notifyAll()

下面的案例程序错误的实行了一个简单的生产者和消费者的问题。它由4个类组成: Queen :设法获取同步的序列;Producer:产生排队的线程对象;Consumer:消费序列的线程对象;PC:创建单个Queen,Producer和Consumer的小类。

错误案例图

理想正确案例图

源码结果比较图

结语:横看成岭侧成峰,远近高低各不同。每天学习一点点,线程也不会很难

文章来源:智云一二三科技

文章标题:java线程间的通信-wait()、notify()、notifyAll()详解及案例

文章地址:https://www.zhihuclub.com/194042.shtml

关于作者: 智云科技

热门文章

网站地图