Java--面包师与消费者2(发送线程与接收线程)
来源:互联网 发布:万德数据库学生版 编辑:程序博客网 时间:2024/06/11 06:53
线程协作:采用信号量和同步方法使发送线程与接收线程同步运行
加锁+信号量(isEmpty)+pv操作(notify()和wait())
public class bufferLock {//加互斥锁的缓冲区 private int value;//共享变量 private boolean isEmpty=true; public synchronized void put(int i){//同步方法 while(!isEmpty)//生产的面包不为空时,面包师就等 try { this.wait();//是调用该方法当前线程等待状态 } catch (InterruptedException e) { } value=i;//当value空,value获得值 isEmpty=false;//设置value不为空(信号量) notify();//唤醒其他等待线程 } public synchronized int get(){ while(isEmpty)//面包被吃完,就等待 try { this.wait(); } catch (InterruptedException e) { } isEmpty=true; notify(); return value; }}class sender extends Thread{ private bufferLock buffer; public sender(bufferLock buffer) { this.buffer=buffer; } public void run() { for(int i=1;i<6;i++){ buffer.put(i); System.out.println("sender put:"+i); } }}class receiver extends Thread{ private bufferLock buffer; public receiver(bufferLock buffer) { this.buffer=buffer; } public void run() { for(int i=1;i<6;i++){ System.out.println("receiver get:"+buffer.get()); } } public static void main(String args[]){ bufferLock buffer=new bufferLock(); (new sender(buffer)).start(); (new receiver(buffer)).start(); }}
运行结果:
sender put:1
sender put:2
receiver get:1
receiver get:2
sender put:3
receiver get:3
sender put:4
receiver get:4
sender put:5
receiver get:5
0 0
- Java--面包师与消费者1(发送与接收线程)
- Java--面包师与消费者2(发送线程与接收线程)
- JAVA线程(生产者与消费者)
- java线程 生产者与消费者
- java线程 生产者与消费者
- java线程(2)——模拟生产者与消费者
- 线程(消费者与生产者)
- 线程生产者与消费者
- 线程---生产者与消费者
- java线程模拟生产者与消费者
- 生产者与消费者 java经典线程法
- JAVA 线程间通信 - 生产者与消费者
- java线程经典之生产者与消费者
- java之多线程实例 生产者与消费者
- JAVA 线程间通信 - 生产者与消费者
- java线程通信 生产者与消费者模式
- java线程生产者与消费者模型
- java线程之生产者与消费者模式
- activity 左右侧滑跳转动画
- resin linux启动脚本
- 本页不但包含安全的内容,也包含不安全的内容
- elasticsearch安装
- XListView上拉加载下拉刷新
- Java--面包师与消费者2(发送线程与接收线程)
- 【论文笔记】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- iOS推送:本地通知UILocalNotification
- Linux基础(FTP服务搭建)
- coreData初步认识
- Spring整合Hibernate 声明式的事务管理
- DP-Max sum
- UI进度条相关
- 当机器人系统与三维可视化仿真遇到虚拟现实技术