java线程间的通讯
主要通过wait()和notify()方法进行线程间的通讯
class Product extends Thread{String name;float price;boolean flag = false;}class Productor extends Thread{Product p;public Productor(Product p) {this.p = p;}int i = 0;@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();while(true){synchronized(p){//通知生产者生产//p.notify();if(!p.flag){if(i%2 == 0){p.name = "苹果";try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}p.price = 4.5f;System.out.println("生产者生产了"+p.name+" 价格是"+p.price);}else{p.name ="香蕉";p.price = 2.5f;System.out.println("生产者生产了"+p.name+" 价格是"+p.price);}i++;p.flag = true;p.notify();}else{//生产了产品后等待消费者消费try {p.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}}class Consumer extends Thread{Product p;public Consumer(Product p) {this.p = p;}@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();while(true){synchronized(p){//通知启动消费者消费//p.notify();if(p.flag){System.out.println("消费者消费了"+p.name+"价格是"+p.price);p.flag = false;p.notify();}else{//消费了产品后等待生产者生产try {p.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}
//main方法public static void main(String[] args) {Product p = new Product();Productor productor = new Productor(p);Consumer consumer = new Consumer(p);productor.start();consumer.start();}
转载于:https://www.cnblogs.com/it-life-nathan/p/6899783.html
java线程间的通讯相关推荐
- java 线程间的通讯(升级版)
package com.chnsys.threaddemo;public class JavaResearch {/*** @param args* 模拟死锁**///等待唤醒机制/*1:input: ...
- java 线程类 通信_Java 中利用管道实现线程间的通讯
在Java 语言中,提供了各种各样的输入输出流(stream),使我们能够很方便的对数据进行操作,其中,管道(pipe)流是一种特殊的流,用于在不同线程(threads)间直接传送数据.一个线程发送数 ...
- java线程间通讯的几种方式
并发编程中,我们可能会遇到这样一个场景 A.B两个线程并行,但是我希望保证B线程在A线程执行完了后再执行 这个时候就需要线程间进行通讯 A执行完了后对B说一声,喂,我执行完了 来康康用Java怎么实现 ...
- java中的僵死进程_Java中线程间怎么通讯?什么叫僵死线程?
<尸家保镖> <猛鬼出千> <不死心灵> <大家发财> <灵幻少女> <九天玄女> <僵尸至尊> <湘西尸王& ...
- Java线程间通信-回调的实现方式
2019独角兽企业重金招聘Python工程师标准>>> Java线程间通信-回调的实现方式 Java线程间通信是非常复杂的问题的.线程间通信问题本质上是如何将与线程相关的变量或者对象 ...
- java线程间ThreadLocal的传递
文章目录 1 场景 2 需确认问题 2.1 继承线程的ThreadLocal的含义 2.2 子线程内的ThreadLocal的值和父线程内的有什么关系? 2.3 父线程内的ThreadLocal清除后 ...
- java线程间通信的方式
java线程间通信的方式 1. 共享变量 2. 等待/通知 3. 管道流 1. 共享变量 volatile修饰的变量,线程间可见,可使用这种变量作为线程间传递消息的媒介: 延伸出来的,还有redis中 ...
- java基础—线程间的通讯 生产者与消费者
线程间的的通讯 生产者与消费者 public class TestDemos3 {public static void main(String[] args){Res r = new Res();I ...
- java线程间通信管道_通过管道进行线程间通信
管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据.一个线程发送数据到输出管道,另一个线程从输入管道中读数据.通过管道,实现不同线程间的通信,而无须借助类似共享变量.临时文件之 ...
最新文章
- 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】
- 言有三文章 - AI系列完整阅读
- 用户研究,你还在“凭感觉”吗?
- 划重点!《企业数字化升级之路》白皮书讲了哪些干货?
- 摩托罗拉ex232java_摩托罗拉ex232r如何刷机?摩托罗拉ex232r评测
- 王道计算机组成原理 物理层整理 超详细版
- 软考高级论文如何“吹”
- python常用代码大全-Python常用库大全及简要说明
- linux内存管理_架构师必读:Linux 的内存分页管理
- 在php里怎么安装composer,怎么安装composer
- [你必须知道的异步编程]——基于任务的异步模式
- 提升SQLite数据插入效率低、速度慢的方法
- 开源 cocos2dx 五彩连珠.
- 基于UP30飞控系统的无人机地面站航线规划方法
- 计算机cad比例尺1 150,CAD图纸里面 1:50 和:1:100和1:150三个比例分别怎么换算...
- 说说基因组的垃圾DNA-Transposable elements
- 葛道辉,李洪升,张亮,等. 轻量级神经网络架构综述
- commitizen和cz-customizable配置git commit message
- python精通要数学好_深度学习需要多强的数学基础?
- 服务都微了,编排怎么整?