关于多线程中wait()跟notify()的疑问

关于多线程中wait()和notify()的疑问
本帖最后由 zychere 于 2014-07-17 14:20:15 编辑
关于多线程,资料上说当线程A使用wait()方法后释放对象锁,直到其他线程使用notify()进行唤醒操作,但是这里是JVM会在wait()对象锁的线程中随机选取一线程,这就有一个问题了,如果多个线程都在wait状态的话,我想指定唤醒某一个线程不可以么?只能JVM随机唤醒?或者全部唤醒?
------解决方案--------------------
不能指定唤醒某个线程,因为这是jvm自己调度的。

引用:
你可以看看优先级。。

猜测一下一楼说的意思:所有在同一个锁对象上调用wait的线程中,如果有优先级高的,那么他将被优先唤醒。是吧?这个我还真没有试验过,不得而知,一楼试验过吗?
------解决方案--------------------
notify()不能唤醒指定的单一线程,只能用notifyAll()唤醒全部线程,要唤醒单一线程,可以看看 java.util.concurrent.locks ,这个可以实现
------解决方案--------------------
如果你想制定某一类线程优先运行,可以考虑优先级。notifyAll()没有办法指定线程获取资源!
------解决方案--------------------
Java API描述如下:
Wakes up a single thread that is waiting on this object's monitor. If any threads are waiting on this object, one of them is chosen to be awakened. The choice is arbitrary and occurs at the discretion of the implementation. A thread waits on an object's monitor by calling one of the wait methods. 

不能指定,唤醒是随意的