多线程之生产者消费者模型
2015-06-24 23:06
267 查看
生产者消费者
一个最简单的模型。两个线程,一个生产者,一个消费者,生产者负责生产,消费者负责消费。
分析:
同步:生产者生产了之后,消费者进行读取数据。wait 和notify机制
互斥:生产者生产时,消费者不能进行读取。锁机制。
一个最简单的模型。两个线程,一个生产者,一个消费者,生产者负责生产,消费者负责消费。
分析:
同步:生产者生产了之后,消费者进行读取数据。wait 和notify机制
互斥:生产者生产时,消费者不能进行读取。锁机制。
public class ProducerAndConsumer { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Resource s = new Resource(); Producer p = new Producer(s); Consumer c = new Consumer(s); new Thread(p).start(); try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } new Thread(c).start(); } } //定义资源 class Resource{ boolean flag =false; public synchronized void produce(){ if(!flag){ System.out.println("producer:i hava produce"); flag = true; this.notify(); }else{ try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public synchronized void consume(){ if (flag) { System.out.println("consumer:i have consume"); flag = false; this.notify(); } else { try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } //生产者 class Producer implements Runnable{ private Resource s; Producer(Resource s){ this.s = s; } public void run(){ while (true) { s.produce(); } } } //消费者 class Consumer implements Runnable{ private Resource s; Consumer(Resource s){ this.s = s; } public void run(){ while(true){ s.consume(); } } }
相关文章推荐
- LeetCode——Single Number
- U盘制作Ubuntu15.04启动盘失败
- 多线程 同步问题
- 谈谈Ext JS的组件――布局的使用方法
- Android SDK Manager - SDK下载说明
- iOS-KVO究竟怎么用
- 自动开发环境
- 实验四 用窗函数法设计FIR滤波器
- JAVA中list,set,数组之间的转换详解
- 基本的Sql编写注意事项
- 如何弹出QQ临时对话框实现不添加好友在线交谈效果
- 背包问题
- TCP/IP简介
- 第1讲 zend1.11介绍
- u-boot2010.03 移植篇(四)-----支持DM9000,实现tftp下载
- RecyclerView全解(一)
- ImageView的selector效果
- Python输出字符串或文件颜色显示
- 红黑树学习
- POJ 2376 Cleaning shifts 贪心 基础题