java线程同步wait()外的判断必须是while
2015-03-09 10:35
204 查看
在java线程中,经常遇到这样的代码:
现在的问题是为什么用while而不用if.
因为线程同步必需保证获得锁后从上到下完整的执行,如wait()期间,另外线程notify()后,不能保证获得锁后条件是否成立,换句话说在另外线程notyfy()之后和上面的代码线程再获得锁之前,这时条件破坏,程序就出现了bug.为了避免这个bug出现,而用while不用if.
synchronized(obj){ while(a==1){ lock.wait(); } }
现在的问题是为什么用while而不用if.
因为线程同步必需保证获得锁后从上到下完整的执行,如wait()期间,另外线程notify()后,不能保证获得锁后条件是否成立,换句话说在另外线程notyfy()之后和上面的代码线程再获得锁之前,这时条件破坏,程序就出现了bug.为了避免这个bug出现,而用while不用if.
相关文章推荐
- java中使用wait就得使用同步锁,而且2个线程必须都使用同步代码块,否则就会异常
- java线程同步,必须知道的
- java线程同步原理及wait,notify的用法及与sleep的区别
- Java线程同步中的wait()和notify()使用简单示例
- java线程等待、设置优先级、同步、挂起、恢复(Join、setPriority、synchronized、wait、notify……)
- Java线程同步阻塞, sleep(), suspend(), resume(), yield(), wait(), notify()
- java线程同步——synchronized (wait、notify)
- java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
- [转]java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
- JAVA线程同步中的notify和wait()函数
- java线程同步原理及wait,notify的用法及与sleep的区别
- java线程同步原理及wait,notify的用法及与sleep的区别
- 理解 JAVA线程同步及其中中wait()和notify()简洁例子
- java线程同步原理及wait,notify的用法及与sleep的区别
- java并发包中的Condition和Lock 取代Synchronized、wait、notify/notifyAll实现线程的同步与互斥
- java线程同步,必须知道的
- java线程同步原理及wait,notify的用法及与sleep的区别
- java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
- java生产者消费者PV操作为中,wait判断条件为何是while不是if疑惑解答
- java线程同步:使用Object的wait,notify,notifyAll做线程调度