多线程(五)~ wait/notify机制(等待/通知)
首先我们来看一张图,这张图描述了线程操作的几个步骤。

package com.multiThread.bean;publicclass P {privateObject lock;public P(Object lock){this.lock = lock;}publicvoidSetValue(){try{synchronized(lock){if(!ValueObject.value.equals("")){lock.wait();}String value =System.currentTimeMillis()+"_"+System.nanoTime();System.out.println("set值为:"+ value);ValueObject.value = value;lock.notify();}}catch(Exception e){e.printStackTrace();}}}
package com.multiThread.bean;publicclass C {privateObject lock;public C(Object lock){this.lock = lock;}publicvoid getValue(){try{synchronized(lock){if(ValueObject.value.equals("")){lock.wait();}System.out.println("get的值:"+ValueObject.value);ValueObject.value ="";lock.notify();}}catch(Exception e){e.printStackTrace();}}}
package com.multiThread.thread;import com.multiThread.bean.P;publicclassThreadPimplementsRunnable{private P p;publicThreadP(P p){this.p = p;}@Overridepublicvoid run(){while(true){p.SetValue();}}}
package com.multiThread.thread;import com.multiThread.bean.C;publicclassThreadCimplementsRunnable{private C c;publicThreadC(C c){this.c = c;}@Overridepublicvoid run(){while(true){c.getValue();}}}
package com.multiThread.test.productionConsumption;import com.multiThread.bean.C;import com.multiThread.bean.P;import com.multiThread.thread.ThreadC;import com.multiThread.thread.ThreadP;/*** 等待、通知机制*/publicclassProduceCustomTest{publicstaticvoid main(String[] args){Object lock =newObject();P p =new P(lock);C c =new C(lock);ThreadP tp =newThreadP(p);ThreadC tc =newThreadC(c);Thread t1 =newThread(tp);Thread t2 =newThread(tc);t1.start();t2.start();}}
set值为:1466176983137_22743411842275get的值:1466176983137_22743411842275set值为:1466176983137_22743412731096get的值:1466176983137_22743412731096set值为:1466176983137_22743412952232get的值:1466176983137_22743412952232set值为:1466176983137_22743413140860get的值:1466176983137_22743413140860- .
- .
- .
多线程(五)~ wait/notify机制(等待/通知)的更多相关文章
- Java多线程学习(四)等待/通知(wait/notify)机制
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79690279 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
- Java并发读书笔记:线程通信之等待通知机制
目录 synchronized 与 volatile 等待/通知机制 等待 通知 面试常问的几个问题 sleep方法和wait方法的区别 关于放弃对象监视器 在并发编程中,保证线程同步,从而实现线程之 ...
- 超强图文|并发编程【等待/通知机制】就是这个feel~
你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough ...
- 十六、Condition等待通知
一.简介 我们可以使用syncronized和wait,notify实现等待通知.而syncronized的高级实现Lock,也可以实现等待通知,需要构造Condition的实例对象. JDK文档:h ...
- java 多线程:线程通信-等待通知机制wait和notify方法;(同步代码块synchronized和while循环相互嵌套的差异);管道通信:PipedInputStream;PipedOutputStream;PipedWriter; PipedReader
1.等待通知机制: 等待通知机制的原理和厨师与服务员的关系很相似: 1,厨师做完一道菜的时间不确定,所以厨师将菜品放到"菜品传递台"上的时间不确定 2,服务员什么时候可以取到菜,必 ...
- java多线程系列(三)---等待通知机制
等待通知机制 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理解 ...
- Java Concurrency - wait & notify, 等待通知机制
生产者消费者问题是一个常见的多线程同步案例:一组生产者线程和一组消费者线程共享一个初始状态为空.大小为 N 的缓冲区.只有当缓冲区没满的时候,生产者才能把消息放入缓冲区,否则必须等待:只有缓冲区不空的 ...
- Java多线程之三volatile与等待通知机制示例
原子性,可见性与有序性 在多线程中,线程同步的时候一般需要考虑原子性,可见性与有序性 原子性 原子性定义:一个操作或者多个操作在执行过程中要么全部执行完成,要么全部都不执行,不存在执行一部分的情况. ...
- 《java多线程编程核心技术》不使用等待通知机制 实现线程间通信的 疑问分析
不使用等待通知机制 实现线程间通信的 疑问分析 2018年04月03日 17:15:08 ayf 阅读数:33 编辑 <java多线程编程核心技术>一书第三章开头,有如下案例: ...
- java使用wait(),notify(),notifyAll()实现等待/通知机制
public class WaitNotify { static boolean flag=true; static Object lock=new Object(); static class Wa ...
随机推荐
- POJ_3262 Protecting the Flowers 【贪心】
一.题面 POJ3262 二.分析 这题要往贪心上面想应该还是很容易的,但问题是要证明为什么比值关系就能满足. 可以选择几个去分析,入1-6 与 2-15 和 1-6 与2-5 和 1-6 与 2 ...
- HOW TO MAKE IT FLOW ?
FLEXnet Licensing is a member of the FLEXnet Publisher family of products. It is the most popular ...
- pageHelper 分页插件使用
第一步:引入pageHelper的jar包. 链接:https://pan.baidu.com/s/1m3EyAmd_eoAsay0aM7uEkA 提取码:xmfi 第二步:需要在SqlMapConf ...
- spring对异步的支持
spring中异步方法的配置 1.在web.xml文件中设置org.springframework.web.servlet.DispatcherServlet的async-supported属性为tr ...
- 华为 p8上配置outllook,同步日历/邮件
在网上找了半天,也没有找到合适的方法,在outlook官网上终于找到了配置方式 一种方式是使用outlook的手机应用.(此处省略) 另外一种方式是使用手机自带的邮件/日历应用(见下面操作方法) 如果 ...
- (转)同步异步,阻塞非阻塞 和nginx的IO模型
同步异步,阻塞非阻塞 和nginx的IO模型 原文:https://www.cnblogs.com/wxl-dede/p/5134636.html 同步与异步 同步和异步关注的是消息通信机制 (sy ...
- 01-spring配置详解
1 bean元素 <!--将User对象交给spring容器进行管理 --> <!-- Bean元素:使用该元素描述需要spring容器管理的对象 class属性:被管理对象的完整类 ...
- Ubuntu(Linux) 下 zip 命令使用详解
1.功能作用:压缩文件或者目录 2.位置:/usr/bin/zip 3.格式用法:zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfi ...
- 读《NoSQL精粹》前三章有感
现在NoSQL很流行,所以买了一本这方面的书,这本书虽然很薄 156页,但是感觉的确是大师的经验之谈,对于自己经验还是很少.无法能完全能心领神会,大师所说的,就像一个人说药苦,你没吃过.再听别人描述也 ...
- 腾讯毛华:智能交互,AI助力下的新生态
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 演讲人:毛华 腾讯云语音云总经理 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广 ...