多线程(五)~ 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;
}
@Override
publicvoid run(){
while(true){
p.SetValue();
}
}
}
package com.multiThread.thread;
import com.multiThread.bean.C;
publicclassThreadCimplementsRunnable{
private C c;
publicThreadC(C c){
this.c = c;
}
@Override
publicvoid 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_22743411842275
get的值:1466176983137_22743411842275
set值为:1466176983137_22743412731096
get的值:1466176983137_22743412731096
set值为:1466176983137_22743412952232
get的值:1466176983137_22743412952232
set值为:1466176983137_22743413140860
get的值: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 ...
随机推荐
- 多气体组分DEM流动的DMP并行内存错误
今天踩到一个坑.调DEM反应的时候,气体需要设置为多组分,这时就不能用 DES_INTERP_ON = .T. DES_INTERP_SCHEME = 'GARG_2012' 这个差值格式了,否则DM ...
- CentOS7下php安装mcrypt扩展
https://blog.csdn.net/skykingf/article/details/40185405 以下步骤均为本人实际操作,可能与你的安装方法有所区别,但我会尽量排除疑惑) 大致步骤(1 ...
- mysqy 特别小点
1从另外一个 表的查询结果中查数据(没有条件(无where)) SELECT * FROM (SELECT * FROM students) as aSELECT * FROM student ...
- Java - 打印质数(使用控制嵌套循环跳转)
使用控制嵌套循环跳转,打印输出10 ~ 150之间的质数 代码: public class Testcotinue { public static void main(String[] args) { ...
- Python基本数据类型和其常用方法
Number Bool String List Tuple Dictionary Number 在Python3中 所有整数不管多大都是Int类型,没有Long类型,Python2中有Long类型. ...
- forEach和map和for方法的区别
JS中的forEach.$.each.map方法推荐 转载 2016-04-05 投稿:jingxian 我要评论 下面小编就为大家带来一篇JS中的forEach.$.each.map方法 ...
- vue中遇到的坑 --- 变化检测问题(数组相关)
最近在项目中遇到了一个问题,不知道为什么,所以最后通过动手做demo实践.查文档的方式解决了,这里做一个总结. 例1 <!DOCTYPE html> <html lang=" ...
- centOS使用.htaccess
首先,你要保证你的Aapche已经开启了.htaccess 可以参考:http://www.veryhuo.com/a/view/21259.html 以下是.htaccess文件中的内容: Rewr ...
- 【坑】自动化测试之Excel表格
参考一位大神的博客项目架构,把元素和数据都参数化,但是总是被excel表格坑 1.无法下拉 动作列通过下拉列表来控制,点击下拉列表无反应 解决方案:不知道是不是中间动了什么,因为Excel版本的问题, ...
- jQuery 文本插入和标签移动方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...