生产者消费者模式代码简单实现
来源:互联网 发布:淘宝芭比娃娃玩具套装 编辑:程序博客网 时间:2024/05/20 02:28
看见有些作者在书上用synchronized同步锁去实现,利用wait()和notify()发信号。
其实锁方法是没办法并发的,这样做会把并行变成串行计算了。
信号量最好是创建一个新的类包含生产者和消费者的信号,再使用关键字volatile保证有序性。
代码如下:
public class Main { public static void main(String[]args){ LinkedList<Integer>queen = new LinkedList<Integer>(); Sign sign = new Sign(); sign.iniSign(); new Thread(new Business(new Productor(),queen,500,100,sign)).start(); new Thread(new Business(new Customer(),queen,5,1000,sign)).start(); }}
/** * 信号 */public class Sign { public volatile int sign_p = 0; public volatile int sing_c = 0; public void iniSign(){ this.sign_p = 1; this.sing_c = 0; }}
public class Business implements Runnable { Person person; LinkedList<Integer> queen; int len; int time; Sign sign; public Business(Person person,LinkedList<Integer> queen, int len,int time,Sign sign) { this.person = person; this.queen = queen; this.len = len; this.time = time; this.sign = sign; } @Override public void run() { person.doThis(queen,len,time,sign); }}
public interface Person { void doThis(LinkedList<Integer>queen,int len,int time,Sign sign);}
/** * 消费者,如果队列无数据,无法消费 */public class Customer implements Person { public synchronized void doThis(LinkedList queen, int len, int time, Sign sign) { System.out.println("消费者就绪"); while (true) { while (sign.sing_c == 0) { } try { Thread.sleep(time); } catch (InterruptedException e) { } if (queen.size() > 0) { System.out.println("消费者消费数据: " + queen.removeFirst()); sign.sign_p = 1;//释放生产信号 } else { sign.sing_c = 0; //冻结消费信号 } } }}
public synchronized void doThis(LinkedList<Integer> queen, int len, int time,Sign sign) { System.out.printf("生产者就绪"); int i = 0; while (true) { while(sign.sign_p == 0){// System.out.println("生产者阻塞!!!"); } try { Thread.sleep(time); } catch (InterruptedException e) { } if (queen.size() < len) { queen.addLast(i); System.out.println("生产者,生产数据: " + i++); sign.sing_c = 1;//释放消费信号 } else { sign.sign_p = 0; //冻结生产信号 } } }}
阅读全文
0 0
- 生产者消费者模式代码简单实现
- 简单的生产者消费者模式java实现
- C++11实现简单生产者消费者模式
- Java多线程实现简单生产者消费者模式
- 生产者消费者模式详解及代码实现
- python实现生产者消费者模式代码示例
- 生产者、消费者简单实现
- 生产者消费者简单实现
- 生产者消费者实现代码
- 生产者消费者模式实现
- 生产者消费者模式实现
- 实现生产者-消费者模式
- 生产者消费者模式实现
- 简单介绍 生产者/消费者模式
- java生产者消费者模式代码
- Ruby简单的生产者,消费者模式的实现
- java:一个生产者消费者模式的简单实现
- linux下c++实现简单的生产者消费者队列模式
- Android Arch Component Sample简单解析
- URAL -1167 Bicolored Horses
- ViewGroup的dispatchKeyEvent解析
- 打出*号
- 服务化最佳实践
- 生产者消费者模式代码简单实现
- 每天回顾linux命令(file)
- hdu 3579 Hello Kiki(一元线性同余方程组)
- 11/12Hacker
- Java学习记录之SSM
- 文件的复制
- jq——输入框失去焦点提示错误案例
- 数据结构第九周项目2--二叉树遍历的递归算法
- 75. Sort Colors