线程间的的通讯  生产者与消费者

public class TestDemos3
{public static void main(String[] args){Res  r = new Res();Input in = new Input(r);Output out = new Output(r);Thread t1 = new Thread(in);Thread t2 = new Thread(out);t1.start();t2.start();}}class Res
{String name;String sex;}class Input  implements Runnable
{private Object obj;private Res r;Input(Res r){ this .r = r;}public void run(){boolean b = false;while(true){synchronized(Input.class){if(b){r.name="张三";r.sex="男";b=false;}else{r.name = "kk";r.sex = "woman";b=true;}}}}}
class Output implements Runnable{private Res r;private Object obj;Output(Res r){this.r = r;}public void run(){while(true){synchronized(Input.class){System.out.println(Thread.currentThread().getName()+r.name+": "+r.sex);}}}
}

等待唤醒机制

public class TestDemos3
{public static void main(String[] args){Res  r = new Res();Input in = new Input(r);Output out = new Output(r);Thread t1 = new Thread(in);Thread t3 = new Thread(in);Thread t2 = new Thread(out);Thread t4 = new Thread(out);t1.start();t2.start();t3.start();t4.start();}}class Res
{String name;String sex;boolean flag = false;}class Input  implements Runnable
{private Object obj;private Res r;Input(Res r){ this .r = r;}public void run(){boolean b = false;while(true){synchronized(r){if(r.flag){try {r.wait();} catch (InterruptedException e) {e.printStackTrace();}}if(b){r.name="张三";r.sex="男";b=false;}else{r.name = "kk";r.sex = "woman";b=true;}r.flag=true;r.notify();}}}}
class Output implements Runnable{private Res r;private Object obj;Output(Res r){this.r = r;}public void run(){while(true){synchronized(r){if(!r.flag){try {r.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(Thread.currentThread().getName()+r.name+": "+r.sex);r.flag=false;r.notify();}}}
}

运行程序:

多线程演示生产者与消费者示例

public class ProduceConsumDemos
{public static void main(String[] args) {Ress r = new Ress();Inputs in = new Inputs(r);Outputs out = new Outputs(r);Thread t = new Thread(in);Thread t1 = new Thread(in);Thread t2 = new Thread(out);Thread t3 = new Thread(out);t.start();t1.start();t2.start();t3.start();}}class Ress
{private String name;private boolean blag = false;private int count=0;public synchronized void setInput(String name ){while(blag){try {wait();} catch (InterruptedException e) {e.printStackTrace();}}this.name = name+"--"+count++;System.out.println(Thread.currentThread().getName()+"生产者-"+this.name);blag=true;this.notifyAll();}public synchronized void out(){while(!blag){try {wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(Thread.currentThread().getName()+"消费者---"+this.name);blag=false;this.notifyAll();}}class Inputs implements Runnable
{private Ress r;Inputs(Ress r){this.r=r;}public void run(){while(true){r.setInput("商品");}}
}class Outputs implements Runnable
{private Ress r;Outputs(Ress r){this.r = r;}public void run(){while(true)r.out();}
}

加入Lock

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class Test3
{public static void main(String[] args){System.out.println("text3启动");Resii r = new Resii();Inputii in = new Inputii(r);Outputii out = new Outputii(r);Thread t1 = new Thread(in);Thread t2 = new Thread(in);Thread t3 = new Thread(out);Thread t4 = new Thread(out);t1.start();t2.start();t3.start();t4.start();}
}
class Resii
{private String name ;private boolean flag = false;private int count=0;private Lock lock = new ReentrantLock();private Condition conin = lock.newCondition();private Condition conout = lock.newCondition();public void set(String name ){lock.lock();while(flag){try {conin.await();} catch (InterruptedException e) {e.printStackTrace();}}this.name = name+" :"+count++;System.out.println(Thread.currentThread().getName()+"生产者 "+this.name);flag = true;conout.signal();lock.unlock();}public void out(){lock.lock();while(!flag){try {conout.await();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(Thread.currentThread().getName()+"消费者________"+this.name);flag = false;conin.signal();lock.unlock();}
}class Inputii implements Runnable
{private Resii r;Inputii(Resii r){this.r=r;}public void run(){while (true){r.set("商品");}}
}class Outputii implements Runnable
{private Resii r;Outputii(Resii r){this.r = r;}public void run(){while (true){r.out();}}
}

java基础—线程间的通讯 生产者与消费者相关推荐

  1. 多线程-线程间通信-多生产者多消费者示例

    1.多线程-线程间通信-多生产者多消费者问题 多生产者和多消费者.等待唤醒机制. 产生了两个问题: 1.出现了多次连续生产,未消费,或者一个商品被消费多次. 解决:必须要--------每一个被唤醒的 ...

  2. java多线程:线程间的通信-生产者和消费者(三)

    在一个程序中,往往会通过多个线程协同来共同完成一项任务,线程间必然需要进行信息的传递,也即是进程间的通信,我们用生产者和消费者的例子来具体分析: 对于生产者和消费者之间的关系,他们都是针对同一资源的操 ...

  3. java中的僵死进程_Java中线程间怎么通讯?什么叫僵死线程?

    <尸家保镖> <猛鬼出千> <不死心灵> <大家发财> <灵幻少女> <九天玄女> <僵尸至尊> <湘西尸王& ...

  4. java线程间的通讯

    主要通过wait()和notify()方法进行线程间的通讯 class Product extends Thread{String name;float price;boolean flag = fa ...

  5. java 线程类 通信_Java 中利用管道实现线程间的通讯

    在Java 语言中,提供了各种各样的输入输出流(stream),使我们能够很方便的对数据进行操作,其中,管道(pipe)流是一种特殊的流,用于在不同线程(threads)间直接传送数据.一个线程发送数 ...

  6. Java 如何线程间通信,面试被问哭。。。

    Java 如何线程间通信,曾经小编面试被问哭的一道题.. 正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及 ...

  7. 如何实现线程间的通讯(转载)

    原文出处: wingjay 正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及到的知识点:thread.jo ...

  8. 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池

    并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...

  9. Java中线程基础-线程间的共享-volatile

    对象锁 package com.xiangxue.ch1.syn;import com.xiangxue.tools.SleepTools;/****类说明:演示对象锁和类锁*/ public cla ...

最新文章

  1. 玩转高性能超猛防火墙nf-HiPAC
  2. win7 创建FTP站点
  3. java项目中怎么查看用的序列_如何在Java应用程序中使用序列化分类器对...
  4. Leecode题解汇总(附题型归类)
  5. PCB散热的10种方法!
  6. [转]Microsoft Solution Framework 微软解决方案框架结构
  7. 10 | 递归:如何用三行代码找到“最终推荐人”?
  8. php删除文件代码指定,PHP删除指定文件夹所有文件代码
  9. 开发人员的幸福:您需要知道的
  10. 关于PHP上传文件时配置 php.ini 中的 upload_tmp_dir
  11. 有趣的6种图片灰度转换算法
  12. Python 基金会 —— 模块和包简介
  13. 计算机win10搜不到wifi,Win10电脑搜不到5G无线wifi信号怎么办?
  14. CDH5安装过程中cloudera.server.cmf.Main: Server failed.
  15. Python制作微信小助手
  16. 神经网络(二)—— 神经元、Logistic回归模型
  17. 2所非211院校挺进全球高校600强,甩开一众985 | 泰晤士世界大学排行榜出炉
  18. 谷歌浏览器截全图小技巧
  19. 雅佳5000音色中英文对照表 AKAI EWI5000
  20. 用缓动动画实现鼠标跟随

热门文章

  1. 谷歌官方推出 TensorFlow 中文视频:机器学习从零到一
  2. Google CVPR 2019最新成果!用神经架构搜索实现更好的目标检测
  3. 计算机等级考试二级Python讲座(三)
  4. 无意间发现BAT大佬总结的一份目标检测、卷积神经网络和OpenCV学习资料(教程/PPT/代码)...
  5. 卷积神经网络CNN如何训练?
  6. 精选 26 个 Python 实用技巧,想秀技能先 Get 这份技术列表!
  7. NLP系列学习:CRF条件随机场(2)
  8. Matlab解析LQR与MPC的关系
  9. 电路理论与linkage Mapper的安装
  10. aspen plus大小_Aspen入门篇2—Aspen Plus 使用介绍