Object类中的wait和notify方法(生产者和消费者模式) 不是通过线程调用
生产者和消费者模式 生产线程和消费线程达到均衡
wait方法和notify方法建立在synchronized线程同步的基础之上
实现生产者和消费者模式 仓库容量为10
代码如下
import java.util.ArrayList; public class Test_14 { public static void main(String[] args) { ArrayList list = new ArrayList(); Thread t1 = new Thread(new ProducerThread(list)); t1.setName("producer"); Thread t2 = new Thread(new ConsumerThread(list)); t2.setName("consumer"); t1.start(); t2.start(); } } //生产者线程 class ProducerThread implements Runnable{ private ArrayList arrayList; public ProducerThread(ArrayList arrayList) { this.arrayList = arrayList; } @Override public void run() { while (true) { synchronized (arrayList) { if (arrayList.size() > 9){ try { arrayList.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } arrayList.add(new Object()); System.out.println(Thread.currentThread().getName() + "---> 生产" + "---库存" + arrayList.size()); arrayList.notify(); } } } } //消费者线程 class ConsumerThread implements Runnable{ private ArrayList arrayList; public ConsumerThread(ArrayList arrayList) { this.arrayList = arrayList; } @Override public void run() { while (true){ synchronized (arrayList){ if (arrayList.size() < 9){ try { arrayList.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } arrayList.remove(0); System.out.println(Thread.currentThread().getName() + "---> 消费" + "---库存" + arrayList.size()); arrayList.notify(); } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。