生产者
public class Consumer implements Runnable{
private Tmall tmall;
public Consumer(Tmall tmall){
this.tmall = tmall;
}
@Override
public void run() {
while(true){
tmall.take();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
消费者
public class Producer implements Runnable{
private Tmall tmall;
public Producer(Tmall tmall){
this.tmall = tmall;
}
@Override
public void run() {
while(true){
tmall.push();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
超市类
/**
* 超市类
* @author yanghw
*
*/
public class Tmall {
private int count;
private static final int MAX_COUNT = 10;
public synchronized void push(){
//生成者等待
while(count >= MAX_COUNT){
System.err.println(Thread.currentThread().getName()+"生成过剩,生产者等待。。。");
try {
wait();
} catch (InterruptedException e) {
}
}
count++;
notifyAll();//唤醒所有消费者线程
System.err.println(Thread.currentThread().getName()+"生产者正在生产,当前库存:"+count);
}
public synchronized void take(){
while(count <= 0){//消费者等待
try {
System.err.println(Thread.currentThread().getName()+"消费者等待。。。");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count--;
notifyAll();//唤醒所有消费者线程
System.err.println(Thread.currentThread().getName()+"消费者正在消费,当前库存:"+count);
}
}
public class Main {
public static void main(String[] args) {
Tmall tmall = new Tmall();
Producer producer = new Producer(tmall);
Consumer consumer = new Consumer(tmall);
new Thread(producer).start();
new Thread(producer).start();
new Thread(producer).start();
new Thread(consumer).start();
}
}