Skip to main content
IBMChinaSkip to main content
高级搜索
  IBM 主页 | 产品与服务 | 支持与下载 | 个性化服务
IBM : developerWorks 中国网站 : Java教学 - 在线教程
Java 线程简介
下载 ZIP 文件英文原文    
主菜单章节菜单给出此教程的反馈意见下页
7.其它线程 API 详细信息
  


wait()、notify() 和 notifyAll() 方法 第 1 页(共4 页)


除了使用轮询(它可能消耗大量 CPU 资源,而且具有计时不精确的特征),Object 类还包括一些方法,可以让线程相互通知事件的发生。

Object 类定义了 wait()notify()notifyAll() 方法。要执行这些方法,必须拥有相关对象的锁。

Wait() 会让调用线程休眠,直到用 Thread.interrupt() 中断它、过了指定的时间、或者另一个线程用 notify()notifyAll() 唤醒它。

当对某个对象调用 notify() 时,如果有任何线程正在通过 wait() 等待该对象,那么就会唤醒其中一个线程。当对某个对象调用 notifyAll() 时,会唤醒所有正在等待该对象的线程。

这些方法是更复杂的锁定、排队和并发性代码的构件。但是,notify()notifyAll() 的使用很复杂。尤其是,使用 notify() 来代替 notifyAll() 是有风险的。除非您确实知道正在做什么,否则就使用 notifyAll()

与其使用 wait()notify() 来编写您自己的调度程序、线程池、队列和锁,倒不如使用 util.concurrent 包(请参阅参考资料),这是一个被广泛使用的开放源码工具箱,里面都是有用的并发性实用程序。JDK 1.5 将包括 java.util.concurrent 包;它的许多类都派生自 util.concurrent


主菜单章节菜单给出此教程的反馈意见下页
 关于 IBM | 隐私条约 | 法律条款 | 联系 IBM