java个人学习笔记18(多线程之间通信+等待唤醒机制)
2014-05-08 21:33
627 查看
1.多线程之间的通信
同步机制:解决了没生产就消费的问题,即互斥的执行setRes()和getRes()中的代码
等待唤醒机制:解决对同一个资源多次消费的问题,即达到生产一个就消费一个
wait():该方法可以让线程处于等待状态,并将线程临时存储到线程池中。
notify():唤醒指定线程池中的任意一个。
notifyAll():唤醒指定线程池中的所有线程。
以上方法均应在同步中使用(都是Object的方法),他们是用来操作同步锁上线程状态的
在使用这些方法时,必须标识他们所属于的锁,标识方式是 锁对象.wait() 锁对象.notify() 锁对象.notifyAll();
同步机制:解决了没生产就消费的问题,即互斥的执行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(); } }
相关文章推荐
- Java基础学习5_多线程(线程间通信--等待唤醒机制)
- java多线程——线程间通信之线程等待唤醒机制
- java多线程之 生产者和消费者 线程间通信 等待与唤醒机制
- java多线程学习之线程通信-wait()等待 notify()唤醒
- java多线程(2):线程通信之生产者消费者模式及等待唤醒机制
- 黑马程序员-JAVA基础-多线程间的通信、等待唤醒机制和新特性
- java 中多线程之间的通讯之等待唤醒机制
- 学习java多线程的笔记3-使用BlockingQueue阻塞队列来模拟两个线程之间的通信
- Java---18---多线程:等待唤醒机制
- Android(java)学习笔记71:生产者和消费者之等待唤醒机制
- 多线程之间的友好通信-等待唤醒机制
- (九)Java入门--多线程(4)线程通信--等待唤醒机制
- 【我的Java笔记】多线程_等待唤醒机制(生产消费者模式)
- Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解
- Java多线程四:线程间通信/等待唤醒机制
- java线程之间的通信(等待/通知机制)
- 黑马程序员--线程之间的通信,等待与唤醒机制,线程的终止方式,线程中的其他方法,优先级,toString() 守护线程,GUI图形化界面
- 学习笔记1:java多线程机制之线程概念
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- java 多线程-————等待唤醒机制