版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29479041/article/details/85069703
- 生产者
//生产者
public class PushTarget implements Runnable{
private Tmail tmail;//销售平台
public PushTarget(Tmail tmail) {
this.tmail = tmail;
}
@Override
public void run() {
while(true) {//无限循环
tmail.push();//生产
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
- 消费者
//消费者
public class TakeTarget implements Runnable{
private Tmail tmail;//销售平台
public TakeTarget(Tmail tmail) {
this.tmail = tmail;
}
@Override
public void run() {
while(true) {//无限循环
tmail.take();//消费
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
- 销售平台
public class Tmail {
private int count;//产品数量
public final int MAX_COUNT=10;//产品最大数量
//生产
//使用等待唤醒机制,必须加synchronized
public synchronized void push() {
while(count>=MAX_COUNT) {//产品数量大于等于最大数量,生产者等待
try {
System.out.println(Thread.currentThread().getName()+"库存达到上线,生产者停止生产。。。。。");
wait();//等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count++;
System.out.println(Thread.currentThread().getName()+"生产者生产,当前库存为:"+count);
notifyAll();//唤醒
}
//消费
//使用等待唤醒机制,必须加synchronized
public synchronized void take() {
while(count<=0) {// 产品数量为0,消费者等待
try {
System.out.println(Thread.currentThread().getName()+"当前库存为:"+count+",消费者等待。");
wait();//等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count--;
System.out.println(Thread.currentThread().getName()+"消费者消费。");
notifyAll();//唤醒
}
public static void main(String[] args) {
Tmail tmail = new Tmail();
PushTarget t = new PushTarget(tmail);
TakeTarget t2 = new TakeTarget(tmail);
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t2).start();
new Thread(t2).start();
new Thread(t2).start();
new Thread(t2).start();
new Thread(t2).start();
new Thread(t2).start();
new Thread(t2).start();
}
}