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

zychere 2014-07-17 02:10:24
关于多线程,资料上说当线程A使用wait()方法后释放对象锁,直到其他线程使用notify()进行唤醒操作,但是这里是JVM会在wait()对象锁的线程中随机选取一线程,这就有一个问题了,如果多个线程都在wait状态的话,我想指定唤醒某一个线程不可以么?只能JVM随机唤醒?或者全部唤醒?
...全文
280 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
billxu1989 2014-07-22
  • 打赏
  • 举报
回复
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. 不能指定,唤醒是随意的
lingfeng892 2014-07-21
  • 打赏
  • 举报
回复
notify()不能唤醒指定的单一线程,只能用notifyAll()唤醒全部线程,要唤醒单一线程,可以看看 java.util.concurrent.locks ,这个可以实现
commanager 2014-07-21
  • 打赏
  • 举报
回复
如果你想制定某一类线程优先运行,可以考虑优先级。notifyAll()没有办法指定线程获取资源!
疯癫行者 2014-07-20
  • 打赏
  • 举报
回复
不能指定唤醒某个线程,因为这是jvm自己调度的。
引用 1 楼 rui888 的回复:
你可以看看优先级。。
猜测一下一楼说的意思:所有在同一个锁对象上调用wait的线程中,如果有优先级高的,那么他将被优先唤醒。是吧?这个我还真没有试验过,不得而知,一楼试验过吗?
NeverMore_Mr 2014-07-20
  • 打赏
  • 举报
回复
大概所有线程平行执行的话是随机选取的吧
secret32 2014-07-17
  • 打赏
  • 举报
回复
不能指定唤醒 因为没有api 至于随机唤醒是否有规则 不了解jvm源码 不清楚
zychere 2014-07-17
  • 打赏
  • 举报
回复
有木有人知道
tony4geek 2014-07-17
  • 打赏
  • 举报
回复
你可以看看优先级。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧