线程wait-notify-notifyAll
来源:互联网 发布:旅行社信息管理数据库 编辑:程序博客网 时间:2024/04/28 12:01
wait-notify-notifyAll
- 每一个对象除了有一个锁之外,还有一个等待队列(waitset),当一个对象刚创建的时候,它的等待队列是空的;
- 我们应该在当前线程锁住对象的锁后,去调用该对象的wait方法;
- 当调用对象的notify方法时,将从该对象的等待队列中删除一个任意选择的线程,这个线程将再次成为可运行的线程;
- 当调用对象的notifyAll方法时,将从该对象的等待队列中删除所有等待的线程,这些线程成为可运行的线程;
- wait和notify主要用于producer-consumer这种关系中;
// 同一个队列,一个放,一个取;class Test{ public static void main(String[] args){ Queue q = new Queue(); Product p = new Product(q); Customer c= new Customer(q); p.start(); c.start(); }}class Customer extends Thread{ Queue q; Customer(Queue q){ this.q = q; } public void run(){ while(true){ System.out.println("Customer get:"+q.get()); } }}class Product extends Thread{ Queue q; Product(Queue q){ this.q = q; } public void run(){ for(int i=0;i<10;i++){ q.put(i); System.out.println("Product put:"+i); } }}class Queue{ // 注意:wait 与 notify 要在同一个对象里面 int value; boolean bFull = false; public synchronized void put(int i){ // 需要在同步的环境处理“synchronized” if(!bFull){ value = i; bFull = true; notify();// 通知get可以取了 } try{ wait();// 没取当前值时,继续等待。不能继续放值;由于wait有异常抛出必须捕获 }catch(Exception e){ e.printStackTrace(); } } public synchronized int get(){ if(!bFull){ try{ wait(); }catch(Exception e){ e.printStackTrace(); } } notify(); bFull = false; return value; }}
0 0
- 线程wait-notify-notifyAll
- java线程wait、notify、notifyAll
- JAVA -- 线程wait()、notify()、notifyAll()
- JAVA线程 -- wait notify notifyAll
- java线程:wait,notify,notifyAll
- 关于线程同步通信 wait() notify() notifyAll()
- wait notify notifyall 线程同步方法简述
- 【java】线程同步(synchronized,wait,notify,notifyAll)
- java线程同步(synchronized,wait,notify,notifyAll)
- 线程同步之wait,notify,notifyall
- Java 线程wait, notify and notifyAll 示例
- Java线程中的wait, notify and notifyAll
- JAVA线程间协作:wait.notify.notifyAll
- 线程同步notify,notifyall,wait探究
- 线程间协作:wait、notify、notifyAll
- 【Android】【线程】synchronized、wait、notify、notifyAll
- 线程番外篇(一)wait(),notify(),notifyAll()
- Java 线程同步(wait、notify、notifyAll)
- 一种高效的寻路算法
- java动态代理总结(狗星例子)
- 获取URL指定的资源
- iOS引入JavaScriptCore引擎框架
- c++对map进行排序
- 线程wait-notify-notifyAll
- 设计模式总结
- C指针与const的那些事
- Android_IPC机制
- 代理模式:Proxy模式
- 组合模式:Composite模式
- 177本名著浓缩成了177句话
- 【Linux】Centos6.8安装Redis
- css伪类实现矩形按钮的右边缘中间有一个往里凹陷的小半圆