生产者消费者
模拟 生产者生产产品 放到天猫 消费者去天猫消费
Tmail
public class Tmail { private int count; public final int MAX_COUNT = 10; public synchronized void push(){ while (count >= MAX_COUNT) { try { System.out.println(Thread.currentThread().getName() + "库存达到上线,生产者stop"); wait(); } catch (InterruptedException e) { e.printStackTrace(); } } count++; System.out.println(Thread.currentThread().getName()+"生产者生产,当前库存为:"+count); notifyAll(); } public synchronized void take(){ while (count <= 0){ try { System.out.println(Thread.currentThread().getName()+"库存数量为零,消费者等待"); wait(); }catch (InterruptedException e){ e.printStackTrace(); } } count--; System.out.println(Thread.currentThread().getName()+"消费者消费,当前库存为:"+count); notifyAll(); } }
PushTarget
public class PushTarget implements Runnable { private Tmail tmail; public PushTarget(Tmail tmail){ this.tmail=tmail; } public void run() { while (true) { tmail.push(); try { Thread.sleep(1000); }catch (InterruptedException e){ e.printStackTrace(); } } } }
TakeTarget
public class TakeTarget implements Runnable { private Tmail tmail; public TakeTarget(Tmail tmail){ this.tmail = tmail; } public void run() { while (true) { tmail.take(); try { Thread.sleep(1000); }catch (InterruptedException e){ e.printStackTrace(); } } } }
Test
public class Test {
public static void main(String[] args){
Tmail tmail = new Tmail();
PushTarget p = new PushTarget(tmail);
TakeTarget t = new TakeTarget(tmail);
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
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(t).start();
new Thread(t).start();
}
}