ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaThread等待/通知经典范式

2021-06-03 09:55:23  阅读:187  来源: 互联网

标签:范式 Thread lock JavaThread SimpleDateFormat static 经典 new wait


JavaThread等待/通知经典范式

package com.stono.thread;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.TimeUnit;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(10);
        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 @ "+new SimpleDateFormat("HH:mm:ss").format(new Date()));
                        lock.wait();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }                // 条件不满足时,完成工作
                System.out.println(Thread.currentThread()+" flag is false. running @"+new SimpleDateFormat("HH:mm:ss").format(new Date()));
            }
        }
        
    }    static class Notify implements Runnable{

        @Override        public void run() {            // 加锁,拥有lock的Monitor
            synchronized (lock) {                // 获取lock的锁,然后进行通知,通知时不会释放lock的锁,                // 直到当前线程释放了lock后,WaitThread才能从wait方法中返回
                System.out.println(Thread.currentThread() + " hold lock. notify @ "+ new SimpleDateFormat("HH:mm:ss").format(new Date()));
                lock.notifyAll();
                flag = false;
                SleepUtils.second(10);
            }            // 再次加锁
            synchronized (lock) {
                System.out.println(Thread.currentThread()+" hold lock again. sleep @ "+new SimpleDateFormat("HH:mm:ss").format(new Date()));
                SleepUtils.second(10);
            }
        }
        
    }
}

经典范式

synchronized(object){

  while(条件不满足){

    object.wait();

  }

  逻辑处理;

}

synchronized(object){

  改变条件

  object.notifyAll();

}

 

标签:范式,Thread,lock,JavaThread,SimpleDateFormat,static,经典,new,wait
来源: https://blog.51cto.com/u_15241951/2848787

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有