java wait()notify释放锁
来源:互联网 发布:绘画人偶软件 编辑:程序博客网 时间:2024/06/05 22:44
1
调用obj.wait()会立即释放锁,,以便其他线程可以执行obj.notify(),但是notify()不会立刻立刻释放sycronized(obj)中的obj锁,必须要等notify()所在线程执行完synchronized(obj)块中的所有代码才会释放这把锁.
//而 yield(),sleep()不会释放锁。
//而 yield(),sleep()不会释放锁。
见如下代码:
public class WaitNotify {static boolean flag = true;static Object lock = new Object();public static void main(String[] args) throws Exception {Thread waitThread = new Thread(new Wait(), "WaitThread");waitThread.start();TimeUnit.SECONDS.sleep(1);Thread notifyThread = new Thread(new Notify(), "NotifyThread");notifyThread.start();}static class Wait implements Runnable {public void run() {// 加锁,拥有lock的Monitorsynchronized (lock) {// 当条件不满足时,继续wait,同时释放了lock的锁while (flag) {try {System.out.println(Thread.currentThread()+ " flag is true. wait@ "+ new SimpleDateFormat("HH:mm:ss").format(new Date()));lock.wait();} catch (InterruptedException e) {}}// 条件满足时,完成工作System.out.println(Thread.currentThread()+ " flag is false. running@ "+ new SimpleDateFormat("HH:mm:ss").format(new Date()));}}}// wait()会立刻释放synchronized(obj)中的obj锁,以便其他线程可以执行obj.notify()// 但是notify()不会立刻立刻释放sycronized(obj)中的obj锁,必须要等notify()所在线程执行完synchronized(obj)块中的所有代码才会释放这把锁.// yield(),sleep()不会释放锁static class Notify implements Runnable {public void run() {// 加锁,拥有lock的Monitorsynchronized (lock) {// 获取lock的锁,然后进行通知,通知时不会释放lock的锁,// 直到当前线程释放了lock后,WaitThread才能从wait方法中返回System.out.println(Thread.currentThread()+ " hold lock. notify @ "+ new SimpleDateFormat("HH:mm:ss").format(new Date()));lock.notifyAll();flag = false;try {Thread.currentThread().sleep(5000l);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// 再次加锁synchronized (lock) {System.out.println(Thread.currentThread()+ " hold lock again. sleep@ "+ new SimpleDateFormat("HH:mm:ss").format(new Date()));try {Thread.currentThread().sleep(5000l);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}运行结果:
Thread[WaitThread,5,main] flag is true. wait@ 15:33:26Thread[NotifyThread,5,main] hold lock. notify @ 15:33:27Thread[NotifyThread,5,main] hold lock again. sleep@ 15:33:32Thread[WaitThread,5,main] flag is false. running@ 15:33:37
0 0
- java wait()notify释放锁
- java锁之wait,notify(wait会释放锁,notify仅仅只是通知,不释放锁)
- java锁之wait,notify(wait会释放锁,notify仅仅只是通知,不释放锁)
- java多线程什么时候释放锁—wait()、notify()
- java多线程什么时候释放锁—wait()、notify()
- java锁之wait,notify(wait会释放锁,notify仅仅只是通知,不释放锁)(转)
- 阻塞队列(CountDownLatch代替notify+wait解决wait释放锁,notify不释放锁问题)
- wait ,notfiy 配合synchronized关键字使用,wait立即释放锁,而notify并不立即释放
- java 中的 wait/notify 同步锁机制
- java,wait与notify
- Java多线程wait/notify
- java,wait与notify
- JAVA wait(), notify(),sleep
- java wait,notify使用
- Java Notify Wait Synchronized
- java wait notify
- Java wait notify
- java notify wait
- java中“==”和equal区别
- 生成一个唯一的id
- 【消息队列MQ】ActiveMq的通信方式
- LA 7457 Discrete Logarithm Problem
- Android 粘性广播StickyBroadcast的使用
- java wait()notify释放锁
- Scala学习整理[第十五章 样本类和模式匹配]<Programming In Scala>
- jQuery - AJAX get() 和 post() 方法
- 文章标题
- CART分类与回归树的原理与实现
- android:exported简单理解
- 安装mysql最后一步未响应(解决方法)
- kernel panic
- javascript:执行环境与作用域链以及函数执行