美文网首页
Thread等待通知机制

Thread等待通知机制

作者: 叫我民哥L | 来源:发表于2018-08-21 20:23 被阅读0次
package thread;

import java.time.LocalTime;
import java.util.concurrent.TimeUnit;

/**
 * 等待/通知机制
 *
 * @author lizhenmin
 * @version v1.0
 * @date 2018/8/21 9:28
 */
public class WaitNotify {

    static boolean flag = true;
    static Object lock = new Object();

    public static void main(String[] args) throws InterruptedException {
        Thread waitThread = new Thread(new Wait(), "WaitThread");
        waitThread.start();
        TimeUnit.SECONDS.sleep(1);
        Thread notifyThread = new Thread(new Notify(), "NotifyThread");
        notifyThread.start();
    }

    static class Wait implements Runnable {

        @Override
        public void run() {

            // 加锁,拥有lock的Monitor
            synchronized (lock) {

                // 条件不满足时,继续wait,同时释放了lock的锁
                while (flag) {
                    try {
                        System.out.println(Thread.currentThread() + " flag is true. wait @ " + LocalTime.now());
                        lock.wait();
                    } catch (InterruptedException e) {
                        // do something
                    }
                }

                // 条件满足时,完成工作
                System.out.println(Thread.currentThread() + " flag is false. running @ " + LocalTime.now());
            }
        }
    }

    static class Notify implements Runnable {

        @Override
        public void run() {

            // 加锁,拥有lock的Monitor
            synchronized (lock) {

                // 获取lock锁,然后进行通知,通知时不会释放锁
                // 直到当前线程释放了lock后,WaitThread才能从wait方法中返回
                System.out.println(Thread.currentThread() + " hold lock. notify @ " + LocalTime.now());
                lock.notifyAll();
                flag = false;
                try {
                    TimeUnit.SECONDS.sleep(5);
                } catch (InterruptedException e) {
                }
            }

            // 再次加锁
            synchronized (lock) {
                System.out.println(Thread.currentThread() + " hold lock again. sleep @ " + LocalTime.now());
                try {
                    TimeUnit.SECONDS.sleep(5);
                } catch (InterruptedException e) {
                }
            }
        }
    }
}

相关文章

  • Thread等待通知机制

  • 等待/通知机制

    等待/通知机制 场景 吃饭 : 一家人要吃午饭,妈妈做饭,我和爸爸吃饭。让我和爸爸的坐在桌子旁准备吃饭。但是我和爸...

  • 等待&通知机制

    等待/通知机制 什么是等待/通知机制? 举例说明,厨师和服务员之间的交互: 厨师做完一道菜的时间不确定,所以厨师将...

  • 等待/通知机制

    原文地址:https://hexige.github.io/blog/2017/09/25/%E7%AD%89%E...

  • 等待 - 通知机制

    一个完整的等待 - 通知机制:线程首先获取互斥锁,当线程要求的条件不满足时,释放互斥锁,进入等待状态;当要求的条件...

  • 等待/通知机制

    具体流程:一个线程(生产者)修改(nofity)一个对象,另一个线程(消费者)感知到变化(wait中...)开始进...

  • 线程等待通知机制

    机制的由来 一 个 线 程 修 改 了 一 个 对 象 的 值, 而 另 一 个 线 程 感 知 到 了 变 化,...

  • 线程间通信

    1 Java经典的等待/通知机制 在java中的等待通知机制就是,一个线程让其他线程从wait方法返回。前提:wa...

  • Java并发编程基础-线程间通信

    章节目录 volatile 与 synchronized 关键字 等待/通知机制 等待/通知经典范式 管道输入/输...

  • 再谈ReentrantLock之2

    Condition Lock的等待通知机制,一般这么用: 等待: 通知: await 1.将线程加入到等待队列 先...

网友评论

      本文标题:Thread等待通知机制

      本文链接:https://www.haomeiwen.com/subject/lmcsiftx.html