java个人学习笔记18(多线程之间通信+等待唤醒机制)
来源:互联网 发布:淘宝客成功的原因 编辑:程序博客网 时间:2024/04/28 14:06
1.多线程之间的通信
同步机制:解决了没生产就消费的问题,即互斥的执行setRes()和getRes()中的代码
等待唤醒机制:解决对同一个资源多次消费的问题,即达到生产一个就消费一个
wait():该方法可以让线程处于等待状态,并将线程临时存储到线程池中。
notify():唤醒指定线程池中的任意一个。
notifyAll():唤醒指定线程池中的所有线程。
以上方法均应在同步中使用(都是Object的方法),他们是用来操作同步锁上线程状态的
在使用这些方法时,必须标识他们所属于的锁,标识方式是 锁对象.wait() 锁对象.notify() 锁对象.notifyAll();
//共享资源class Res{private String name;private int num = 1;//定义flag标记,为true表示存在一个未被消费的资源,为false表示资源已被消费。private boolean flag;//生产资源public synchronized void setRes(String name){//判断标记,存在未被消费的资源则进程等待if(flag)try{wait();}catch(InterruptedException e){}this.name = name+"..."+num;num++;System.out.println(Thread.currentThread().getName()+"...Producer..."+this.name);//修改flag标记flag = true;//唤醒消费者notify();}//消费资源public synchronized void getRes(){//判断标记,资源已被消费则进程等待if(!flag)try{wait();}catch(InterruptedException e){}System.out.println(Thread.currentThread().getName()+"...Customer..."+name);//修改标记flag = false;//唤醒生产者notify();}}//生产者class Pro implements Runnable{private Res r;Pro(Res r){this.r = r;}public void run(){while(true)r.setRes("phone");}}//消费者class Cus implements Runnable{private Res r;Cus(Res r){this.r = r;}public void run(){while(true)r.getRes();}}class ProducerCustomerDemo{public static void main(String[] args) {//创建一个资源Res r = new Res();//创建两个任务Pro p = new Pro(r);Cus c = new Cus(r);//创建两个线程Thread t1 = new Thread(p);Thread t2 = new Thread(c);t1.start();t2.start();}}
0 0
- java个人学习笔记18(多线程之间通信+等待唤醒机制)
- java语言多线程通信--等待唤醒机制
- java多线程通信之等待唤醒机制
- 多线程学习笔记(四)之线程间通信---等待唤醒机制
- Java基础学习5_多线程(线程间通信--等待唤醒机制)
- 多线程之间的友好通信-等待唤醒机制
- Java---18---多线程:等待唤醒机制
- Java多线程四:线程间通信/等待唤醒机制
- java多线程等待唤醒机制
- 线程之间的通信--等待唤醒机制
- java多线程(2):线程通信之生产者消费者模式及等待唤醒机制
- java多线程学习之线程通信-wait()等待 notify()唤醒
- 黑马程序员java学习—多线程2:等待唤醒机制
- Java 多线程间的通信 等待唤醒
- Java线程间通信-等待唤醒机制
- 【我的Java笔记】多线程_等待唤醒机制(生产消费者模式)
- 多线程等待唤醒机制
- 多线程-等待唤醒机制
- break continue return的区别
- EL表达式截取字符串的长度,字符串长度大于12个字符后,使用"."代替
- 自动班“C++程序设计”课程综合设计题目
- Matlab中的矩阵运算
- spring mvc ibatis jbpm4.4 cxf weblogic 启动报错
- java个人学习笔记18(多线程之间通信+等待唤醒机制)
- 判断数组中是否有主元素
- 递归建立和遍历二叉树等
- java对象序列化与反序列化总结
- Signal ()函数详细介绍 Linux函数
- Android开源项目第二篇——工具库篇
- LINUX下,编程自学九:daemon用于SERVER
- OCP-1Z0-051 第107题 AVG,MAX,MIN组函数的使用
- Eclipse6.x的常用快捷键一览表