java进阶(40)--wait与notify(生产者与消费者模式)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java进阶(40)--wait与notify(生产者与消费者模式),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3270字,纯文字阅读大概需要5分钟。
内容图文
![java进阶(40)--wait与notify(生产者与消费者模式)](/upload/InfoBanner/zyjiaocheng/595/1966a65ba2cd4ebc95d3f2b4caebca75.jpg)
文档目录:
一、概念
二、wait的作用
三、notify的作用
四、生产者消费者模式
五、举例
---------------------------------------分割线:正文--------------------------------------------------------
一、概念
1、wait与notify为Object类自带,可用户任意的对象
2、wait的作用
o.wait()表示让正在o对象上的活动线程进入等待状态,无期限等待,直到被唤醒为止,释放o线程的锁
3、notify的作用
o.notify()表示让o对象上等待的线程唤醒,只通知,不释放对象的锁
二、生产者消费者模式
1、含义:
一个线程负责生产,一个线程负责消费,为达到生产与消费均衡
2、注意事项:
仓库是多线程共享的,仓库的对象最终调用wait与notify方法,建立在synchronized线程同步机制的基础上
三、举例:使用wait与notify方法实现生产者与消费者模式
1 package com.bk.java.Test40_ProducerAndCousumer; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class ThreadTest { 7 public static void main(String[] args) { 8 //创建仓库对象 9 List list=new ArrayList(); 10 //创建线程对象:生产者与消费者 11 Thread t1=new Thread(new Producer(list)); 12 Thread t2=new Thread(new Consumer(list)); 13 t1.setName("生产者"); 14 t2.setName("消费者"); 15 t1.start(); 16 t2.start(); 17 } 18 } 19 class Producer implements Runnable{ 20 //创建仓库 21 private List list; 22 public Producer(List list) 23 { 24 this.list=list; 25 } 26 @Override 27 public void run() { 28 while (true){ 29 synchronized (list){ 30 if(list.size()>0){ 31 try { 32 list.wait(); 33 } catch (InterruptedException e) { 34 e.printStackTrace(); 35 } 36 } 37 //仓库为空,永久生产 38 Object obj=new Object(); 39 list.add(obj); 40 System.out.println(Thread.currentThread().getName()+"------->"+obj); 41 //唤醒消费者 42 list.notify(); 43 } 44 } 45 46 } 47 } 48 class Consumer implements Runnable{ 49 //创建仓库 50 private List list; 51 public Consumer(List list) 52 { 53 this.list=list; 54 } 55 @Override 56 public void run() { 57 while (true){ 58 synchronized (list){ 59 if(list.size()==0){ 60 //仓库空了 61 try { 62 list.wait(); 63 } catch (InterruptedException e) { 64 e.printStackTrace(); 65 } 66 } 67 Object obj=list.remove(0); 68 System.out.println(Thread.currentThread().getName()+"------->"+obj); 69 //唤醒生产者 70 list.notify(); 71 } 72 } 73 74 } 75 }
查看执行结果-片段:
消费者------->java.lang.Object@214bb29b 生产者------->java.lang.Object@17a03a96 消费者------->java.lang.Object@17a03a96 生产者------->java.lang.Object@767b0dec 消费者------->java.lang.Object@767b0dec 生产者------->java.lang.Object@1d8a042 消费者------->java.lang.Object@1d8a042 生产者------->java.lang.Object@7d7b1588 消费者------->java.lang.Object@7d7b1588 生产者------->java.lang.Object@6b19e43b
内容总结
以上是互联网集市为您收集整理的java进阶(40)--wait与notify(生产者与消费者模式)全部内容,希望文章能够帮你解决java进阶(40)--wait与notify(生产者与消费者模式)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。