生产者消费者问题(java)

来源:互联网 发布:地图制图软件 编辑:程序博客网 时间:2024/05/20 02:29
package com.testcase;public class TestThread {public static void main(String[] args) {Product product = new Product();Producer p1 = new Producer();p1.setProduct(product);Consumer c1 = new Consumer();c1.setProduct(product);Consumer c2 = new Consumer();c2.setProduct(product);Thread t1 = new Thread(p1);t1.setName("生产者1");t1.start();Thread t2 = new Thread(c1);t2.setName("消费者01");t2.start();Thread t3 = new Thread(c2);t3.setName("消费者02");t3.start();}}class Producer implements Runnable{private Product product;public Product getProduct() {return product;}public void setProduct(Product product) {this.product = product;}@Overridepublic void run() {while (true) {try {product.increase();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class Consumer implements Runnable{private Product product;public Product getProduct() {return product;}public void setProduct(Product product) {this.product = product;}@Overridepublic void run() {while (true) {try {product.decrease();Thread.yield();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class Product {private int num = 0;public int getNum() {return num;}public void setNum(int num) {this.num = num;}public synchronized void increase() throws InterruptedException {if (num < 100) {Thread.sleep(200);this.num ++;System.out.println(Thread.currentThread().getName() + "生产第" + num + "个产品!");notifyAll();} else {wait();}}public synchronized void decrease() throws InterruptedException {if (num > 0) {Thread.sleep(500);System.out.println(Thread.currentThread().getName() + "消费第" + num + "个产品!");this.num --;notifyAll();} else {wait();}}}

0 0
原创粉丝点击