多线程之:生产者消费者
来源:互联网 发布:淘宝网店客服怎么设置 编辑:程序博客网 时间:2024/05/22 14:31
一直纠结与生产和消费完后为什么要sleep(),现在终于搞明白了,把代码贴出
package com.mhm.test;public class ProducerConsumer {public static void main(String[] args) {SyncStack ss = new SyncStack();Producer p = new Producer(ss);Consumer c = new Consumer(ss);new Thread(p).start();new Thread(c).start();}}class WoTou {int id; WoTou(int id) {this.id = id;}public String toString() {return "WoTou : " + id;}}class SyncStack {int index = 0;WoTou[] arrWT = new WoTou[2];public synchronized void push(WoTou wt) {while(index == arrWT.length) {try {System.out.println("生产已满,等待消费");this.wait();} catch (InterruptedException e) {e.printStackTrace();}}this.notifyAll();arrWT[index] = wt;index ++;}public synchronized WoTou pop() {while(index == 0) {try {System.out.println("消费已完,等待生产");this.wait();} catch (InterruptedException e) {e.printStackTrace();}}this.notifyAll();index--;return arrWT[index];}}class Producer implements Runnable {SyncStack ss = null;Producer(SyncStack ss) {this.ss = ss;}public void run() {WoTou wt = null;for(int i=0; i<20; i++) {wt = new WoTou(i);ss.push(wt);System.out.println("生产了:" + wt);//如果没有sleep(),那么,打印会跟不上另一个线程执行的速度try {Thread.sleep((int)Math.random() * 200);} catch (InterruptedException e) {e.printStackTrace();}}}}class Consumer implements Runnable {SyncStack ss = null;Consumer(SyncStack ss) {this.ss = ss;}public void run() {for(int i=0; i<20; i++) {WoTou wt = ss.pop();System.out.println("消费了: " + wt);//如果没有sleep(),那么,打印会跟不上另一个线程执行的速度try {Thread.sleep((int)Math.random() * 1000);} catch (InterruptedException e) {e.printStackTrace();}}}}
阅读全文
0 0
- 多线程之生产者-消费者
- 多线程之生产者消费者
- 多线程之生产者-消费者
- 多线程之生产者消费者
- 多线程之生产者消费者
- 多线程之:生产者消费者
- 多线程之生产者消费者模型
- [Java]多线程之生产者消费者
- 多线程之生产者消费者模型
- 多线程之生产者消费者问题
- 多线程之生产者消费者问题
- 多线程之生产者消费者问题
- 多线程之生产者消费者模型
- 多线程编程之生产者消费者
- 多线程之生产者消费者问题
- 多线程之生产者消费者模式
- 多线程之生产者-消费者模式
- 多线程之生产者消费者模型
- 线程的同步
- 使用Hessian和Burlap发布远程接口服务步骤
- 线程模仿 ATM取钱
- 质因数分解
- Educational Codeforces Round 30(补题) A B略 C(贪心)
- 多线程之:生产者消费者
- BLE-NRF51822教程3-sdk程序框架剖析
- JAVA 代码覆盖率工具 JaCoCo-原理篇
- 下载安装mysql-5.7.x.msi
- 【微信小程序】开发准备
- 设置复选框选中(页面显示时作用)
- oracle 的一些命令
- 【1037】合并有序数组
- StringBuffer 和 StringBuilder 的区别