目的是回顾多线程的几个api
多生产者+多消费者+共享池
public class Producer extends Thread{ private Store s; private String name; public Producer(Store s,String name) { this.s = s; this.name = name; } @Override public void run() { while (true){ synchronized (s){ if(s.isFull()){ try { s.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else{ try { s.add(name); Thread.sleep(300); s.notifyAll(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } }
public class Customer extends Thread{ private Store s; private String name; public Customer(Store s,String name) { this.s = s; this.name = name; } @Override public void run() { while (true){ synchronized (s){ if(s.isEmpty()){ try { s.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else { try { s.get(name); Thread.sleep(300); s.notifyAll(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } }
public class Store { private int size; private static final int MAX_SIZE = 20; public void get(String name) { size--; System.out.println("消费者 "+name+"取出商品,池子里剩余奖品数量: "+size); } public void add(String name) { size++; System.out.println("生产者 "+name+"放入商品,池子里剩余奖品数量: "+size); } public boolean isEmpty(){ return size == 0; } public boolean isFull(){ return size == MAX_SIZE; } public int getSize(){ return size; } }