await() 可以指定等待的条件,如何指定,代码示例
时间: 2023-05-26 20:02:49 浏览: 42
在Java中,可使用以下语法来指定await()的条件:
```
synchronized (lock) {
while (!condition) {
lock.wait();
}
// do something when condition is true
}
```
这段代码会在一个对象锁上同步,并在等待条件(condition)为 true 时继续执行。如果条件不满足,则线程会一直等待,直到另一个线程调用了相同对象锁上的 notify() 或 notifyAll() 方法来通知其条件已经改变。
具体可以参考以下代码示例:
```
public class AwaitDemo {
private static int value = 0;
private static final Object lock = new Object();
private static boolean isValueSet = false;
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
synchronized (lock) {
while (!isValueSet) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Thread 1 - value is: " + value);
}
});
Thread t2 = new Thread(() -> {
synchronized (lock) {
value = 10;
isValueSet = true;
lock.notifyAll();
}
});
t1.start();
t2.start();
}
}
```
在这个示例中,Thread 1会一直等待,直到Thread 2设置了isValueSet变量后,才会执行后面的操作。这样可以确保线程安全,并且在必要时减小CPU和内存的占用。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)