Java多线程中wait、notify、notifyAll的使用详解和应用
版权申诉
5星 · 超过95%的资源 89 浏览量
更新于2024-09-11
收藏 77KB PDF 举报
"Java多线程中wait、notify、notifyAll使用详解"
Java多线程中wait、notify、notifyAll使用详解是Java多线程编程中非常重要的一部分。这些方法都是Object对象的方法,所有Java对象都具有这些方法。下面我们来详细介绍这些方法的使用和作用。
首先,我们来看一下这些方法的定义:
* `public final native void notify();`
* `public final native void notifyAll();`
* `public final native void wait(long timeout) throws InterruptedException;`
* `public final void wait() throws InterruptedException { wait(0); }`
其中`notify()`、`notifyAll()`、`wait(long timeout)`是本地方法。
这些方法主要用来在线程之间进行通信的。可能有人会问,既然是用来线程之间通信的,那为什么这些方法不是在线程类Thread上呢?我们先来看一下这些方法的使用方式,然后再来回答这个问题。
在Java中规定,在调用wait、notify、notifyAll方法时,当前线程必须获得对象锁。因此就得配合synchronized关键字来使用。例如:
```java
synchronized(object) {
while (condition) {
object.wait();
}
// object.notify();
// object.notifyAll();
}
```
或者
```java
public synchronized void methodName() {
while (condition) {
object.wait();
}
// object.notify();
// object.notifyAll();
}
```
在synchronized拿到对象锁之后,synchronized代码块或者方法中,必定是会持有对象锁的,因此就可以使用wait()或者notify()。
通过上述使用方法,我们也能很好理解为什么这些方法是在Object上而不是在Thread上。因为每个对象都可以作为synchronized锁的对象,因此wait、notify等必须和对象关联才能配合synchronized使用。
wait()方法的作用是使当前线程等待,直到其他线程调用notify()或notifyAll()方法。wait()方法可以带一个参数,表示等待的超时时间。如果不带参数,则等待直到其他线程调用notify()或notifyAll()方法。
notify()方法的作用是唤醒一个正在等待的线程,而notifyAll()方法的作用是唤醒所有正在等待的线程。
在Java多线程编程中,wait()、notify()、notifyAll()方法的使用非常重要。它们可以帮助我们实现线程之间的通信和协作,从而提高程序的效率和可靠性。
wait()、notify()、notifyAll()方法是Java多线程编程中非常重要的一部分。它们可以帮助我们实现线程之间的通信和协作,从而提高程序的效率和可靠性。
2020-12-22 上传
2020-09-05 上传
2020-08-25 上传
2020-08-27 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38612139
- 粉丝: 3
- 资源: 885
最新资源
- Thinking in java 2rd Edition
- 互联网产品开发流程文档
- 七种数据库连接 mysql、oracle……
- 模式识别前四章答案-清华大学-边肇祺
- struts2权威指南
- Struts in Action 中文版
- JBoss+jBPM+jPDL用户开发手册
- PHOTOSHOP技巧
- 李涛JAVA学习资料
- 人力资源系统很详细的描述
- JasperReport-iReport报表开发指南.pdf
- Ant全攻略 教会你如何玩转Ant
- 手把手教你用C#打包应用程序(安装程序)
- 实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架
- 数字电视原理与实现pdf
- 我的VS2008学习资料