* 生产者生产一个,消费者消费一个 */ public class ThreadTest07 { public static void main(String[] args) { List list=new ArrayList(); Thread t1=new Thread(new Producer(list)); Thread t2=new Thread(new Consumer(list)); t1.setName("生产者线程"); t2.setName("消费者线程"); t1.start(); t2.start(); } } //创建一个生产者线程 class Producer implements Runnable{ private List list; public Producer(List list){ this.list=list; } @Override public void run() { while (true) { synchronized (list) { if (list.size() > 0) {//说明集合中有一个元素,停止生产 try { list.wait();//线程进入等待状态 } catch (InterruptedException e) { e.printStackTrace(); } } //如果程序走到这说明集合中没有元素,需要生产 Object obj = new Object(); list.add(obj); System.out.println(Thread.currentThread().getName() + "-->" + obj); //同时将消费者线程唤醒 list.notify(); } } } } //创建一个消费者线程 class Consumer implements Runnable{ private List list; public Consumer(List list){ this.list=list; } @Override public void run() { while(true) { synchronized (list) { if (list.size() == 0) {//说明集合中没有元素,消费线程进入等待 try { list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //如果程序执行到这,说明集合中有元素 Object obj = list.remove(0); System.out.println(Thread.currentThread().getName() + "-->" + obj); //同时唤醒生产者继续生产 list.notifyAll(); } } } }
生产者和消费者模式wait()和notify()
最新推荐文章于 2022-08-02 14:22:37 发布