public class Producer implements Runnable{
private String name;
private Food food;
Producer() {
}
Producer(String name, Food food) {
this();
this.name = name;
this.food =food;
}
public String getName() {
return this.name;
}
public int getFood() {
return food.getNum();
}
public void product () {
while (true) {
System.out.println(this.getName()+"生产了食物,剩余"+food.produce()+"个");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void run() {
// TODO Auto-generated method stub
this.product();
}
}
class Food {
private static int num =0;
Food (int num){
Food.num = num;
}
public int getNum() {
return Food.num;
}
public synchronized int produce (){
Food.num++;
notify();
return num;
}
public synchronized void consume () {
if (num>0) {
Food.num--;
}
else {
System.out.println("食物没有了,等待生产");
try {
wait();
Food.num--;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Customer.java public class Customer implements Runnable{
private String name;
private Food food;
Customer(){
}
Customer(String name,Food food) {
this();
this.name = name;
this.food = food;
}
public String getName() {
return this.name;
}
public int getFood() {
return food.getNum();
}
public void custom () {
while (true) {
food.consume();
System.out.println(this.getName()+"消费了食物,剩余"+food.getNum()+"个");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void run() {
// TODO Auto-generated method stub
this.custom();
}
}
Test.java
public class Test {
public static void main (String[] args) {
Food food = new Food(5);
Producer pro = new Producer("pro1",food);
Customer cus = new Customer("cus1",food);
Thread t1 = new Thread(pro);
Thread t2 = new Thread(cus);
t1.start();
t2.start();
}
}
本文介绍了一个典型的生产者消费者模式实现案例,通过Java代码展示了如何利用多线程技术实现资源的生产和消费过程。该模式使用了同步方法来确保线程间的正确交互,并通过等待-通知机制协调生产者和消费者的活动。
5777

被折叠的 条评论
为什么被折叠?



