线程间通讯 wait notify notifyAll简单使用
来源:互联网 发布:英语单词读音软件小学 编辑:程序博客网 时间:2024/06/06 17:54
注意的问题。
为什么这三个方法必须在synchronized方法中使用?
并且调用wait notify和notifyAll的对象必须是锁对象。
可以看一下三个方法的源码实现。
http://blog.csdn.net/raintungli/article/details/6532784
个人理解如果没有在synchronized修饰的方法中,对象的对象头指向的MonitorObject是null,所以在调用时会出错。
代码如下
package com.example.ahl.one;public class Test { int size; public static void main(String[] args) { Test test = new Test(); Object lock = new Object(); new Thread(test.new Producter(lock)).start(); new Thread(test.new Consumer(lock)).start(); } class Producter implements Runnable { Object lock; public Producter(Object lock) { this.lock = lock; } @Override public void run() { synchronized (lock) { while(true){ if (size >= 5) { try { System.out.println("等待消费"); lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } size++; System.out.println("正在生产 size = " + size); if (size == 5) { lock.notifyAll(); } } } } } class Consumer implements Runnable { Object lock; public Consumer(Object lock) { this.lock = lock; } @Override public void run() { synchronized (lock) { while (true) { if(size<=0){ try { System.out.println("等待生产"); lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } size--; System.out.println("消费 size =" + size); if (size == 0) { lock.notifyAll(); } } } }}}
阅读全文
0 0
- 线程间通讯 wait notify notifyAll简单使用
- 线程wait-notify-notifyAll
- JAVA线程间协作:wait.notify.notifyAll
- 线程间协作:wait、notify、notifyAll
- 线程间协作:wait、notify、notifyAll
- JAVA线程间协作:wait.notify.notifyAll
- wait/notify/notifyAll实现线程间通信
- java线程通讯——使用Lock和Condition代替synchronized 和 wait, notify notifyAll()
- Java多线程㈤—②线程间通讯(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的使用
- wait() notify() notifyAll() 使用范例
- wait, notify 和 notifyAll 使用
- Thread线程间通讯-wait,notify
- windows下打jar包的方法
- scrum
- 在ubuntu16.04上使用qemu
- C# string类型和byte[]类型相互转换
- hibernate缓存总结
- 线程间通讯 wait notify notifyAll简单使用
- 安卓智能地图开发与实施十八:空间要素绘制
- Mac环境下配置python3
- android_系统广播大全
- libcocos2d
- spark高级数据分析系列之第二章用 Scala 和 Spark 进行数据分析
- C++ Primer 初学之旅
- JSTL标签
- pthread_create函数的详细讲解(包括向线程函数传递参数详解)