package com.qianfeng.demo04;
/**
* 。
* */
//资源
class Resource{
private String name;
private int count = 1;
private boolean flag; //判断盘子里是否有馒头的标志位。
public synchronized void set(String name){
if (flag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.name = name+count;
count++;
System.out.println(Thread.currentThread().getName()+"....生产了..."+this.name);
flag = true;
this.notify();
}
public synchronized void get(){
if (!flag) {
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"....消费了..."+this.name);
flag = false;
this.notify();
}
}
//生成者
class Produce implements Runnable{
private Resource r;
public Produce(Resource r) {
this.r = r;
}
@Override
public void run() {
while (true) {
r.set("馒头");
}
}
}
//消费者
class Customer implements Runnable{
private Resource r;
public Customer(Resource r) {
this.r = r;
}
@Override
public void run() {
while (true) {
r.get();
}
}
}
public class ProCusDemo01 {
public static void main(String[] args) {
Resource r = new Resource();
Produce p = new Produce(r);
Customer c = new Customer(r);
Thread t0 = new Thread(p);
Thread t1 = new Thread(p);
Thread t2 = new Thread(c);
Thread t3 = new Thread(c);
t0.start();
t1.start();
t2.start();
t3.start();
}
}
多线程——等待唤醒机制经典实例:生产者消费者模式
最新推荐文章于 2022-04-02 14:00:00 发布