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;
}
@Override
public void run() {
while (true) {
try {
product.increase();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
private Product product;
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
@Override
public void run() {
while (true) {
try {
product.decrease();
Thread.yield();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.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();
}
}
}
生產者消費者問題(java)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.