写一个生产者-消费者模式的多线程例子。
(生产和消费的资源保持一个平衡)
public class Test {
private int count;//要求count保持在10
public synchronized void add(){
//生产者线程 ,当count>10,让生产者线程等待,唤醒消费者线程
while (count>10){
try {
this.wait();//等待,被唤醒是才能执行下面的代码
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count++;
this.notifyAll();
System.out.println("生产了一件商品,库存剩余:"+count);
}
public synchronized void sub(){
//消费线程 ,当count<10,让消费者线程等待,唤醒生产者线程
while (count<10){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count--;
this.notifyAll();
System.out.println("卖出了一件商品,库存剩余:"+count);
}
public static void main(String[] args) {
Test t=new Test();
ProductRunnable pr=new ProductRunnable(t);
ConsummerRunnable cr=new ConsummerRunnable(t);
new Thread(pr).start();
new Thread(pr).start();
new Thread(pr).start();
new Thread(pr).start();
new Thread(cr).start();
new Thread(cr).start();
new Thread(cr).start();
new Thread(cr).start();
new Thread(cr).start();
new Thread(cr).start();
}
private static class ProductRunnable implements Runnable{
private Test t;
public ProductRunnable(Test t){
this.t = t;
}
public void run(){//线程方法
while(true){
t.add();//往仓库加货物
try {
Thread.sleep(1000);//设置线程休息1s
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
private static class ConsummerRunnable implements Runnable{
private Test t;
public ConsummerRunnable(Test t){
this.t = t;
}
public void run(){
while(true){
t.sub();
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
运行结果: