生产消费模式
来源:互联网 发布:vb中instr什么意思 编辑:程序博客网 时间:2024/04/28 00:14
package com.phone.week5.day3;
/**
* 有一个仓库放字符的,它有一个生产字符的方法,也有一个拿字符的方法(仓库里只能有一个字符)
* 有一个生产者,可以调用仓库里生产字符的方法
* 有一个消费者,可以调用仓库里拿字符的方法
* 两个人不能同时生产或拿
*1.创建一个共享资源类
*2.创建生产者
*3.创建消费者
*5.测试
*
*/
public class Test {
public static void main(String[] args) { ShareDate sd = new ShareDate(); Pro p = new Pro(sd); Custor c = new Custor(sd); Pro p1 = new Pro(sd); Custor c1 = new Custor(sd); p.start(); c.start(); p1.start(); c1.start();}
}
//生产者类
class Pro extends Thread{
private ShareDate sd;
public Pro(ShareDate sd){
this.sd = sd;
}
@Override
public void run() {
for (char c = ‘a’;c<=’d’;c++) {
try {
Thread.sleep((int)(Math.random()*3000));
} catch (InterruptedException e) {
e.printStackTrace();
}
sd.pushDate(c);
}
}
}
//消费者类
class Custor extends Thread{
private ShareDate sd;
public Custor(ShareDate sd){
this.sd = sd;
}
@Override
public void run() {
char c ;
do{
try {
Thread.sleep((int)(Math.random()*3000));
} catch (InterruptedException e) {
e.printStackTrace();
}
c=sd.getData(); }while(c!='d');}
}
//资源类
class ShareDate{
private char c; //有字符
//生产者与消费者互相通知的一个标识
private boolean flag = false; //表示没有字符,消费者不能消费
//生产的方法public synchronized void pushDate(char c){ //表示可以生产 while(flag){ System.out.println("消费者还没有消费,因此生产者还不能生产"); try { this.wait();//---> } catch (InterruptedException e) { e.printStackTrace(); } } this.c = c; //生产字符 flag = true; //表示通过消费者来消费 this.notify(); System.out.println("生产者已经生产完字符:"+c+"请消费者来消费");}//拿字符的方法public synchronized char getData(){ while(!flag){ System.out.println("生产者还没有生产,因此消费者还不能消费"); try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); flag = false; System.out.println("消费者已经拿到字符:"+c+"请生产者来生产"); return c;}
}
- 线程生产消费模式
- 生产消费模式
- 生产消费模式
- 生产消费设计模式
- 生产/消费模式实现
- 生产消费设计模式
- blockingQueue实现消费-生产模式
- JAVA生产消费模式(代码及流程图)
- Java多线程实例->生产消费模式
- ActiveMQ 由浅入深之二(生产消费模式)
- java多线程之生产消费模式
- 生产消费模式之数据结构策略
- 线程的简单生产消费模式
- 生产消费模式的几种实现
- 生产消费
- 生产消费
- 通过pthread_mutex_lock和pthread_cond_wait实现生产消费模式,并且生产一次消费一次
- 设计模式学习之——生产消费模式
- HDU - 3035 War(对偶图+最小割+最短路)
- nonatomic, retain,weak,strong用法详解
- 给NGUI 提供支持英文单词换行功能
- 用动态数组保存学生姓名
- MySQL 添加列,修改列,删除列
- 生产消费模式
- 通过前台jquery调用本地WebService(一) SOAP体
- Android 开发和学习资源总结
- 为什么要和成熟的男人谈恋爱
- iptables 从链、表开始理解
- MySQL存储引擎 InnoDB与MyISAM的区别
- PHP学习---ThinkCMF的三个基类
- 自学ios开发学习路线详细分解
- XML和JSON数据解析