gpt4 book ai didi

java - java中有 'block until condition becomes true'函数吗?

转载 作者:IT老高 更新时间:2023-10-28 13:52:45 25 4
gpt4 key购买 nike

我正在为服务器编写一个监听器线程,目前我正在使用:

while (true){
try {
if (condition){
//do something
condition=false;
}
sleep(1000);

} catch (InterruptedException ex){
Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
}
}

使用上面的代码,我遇到了 run 函数占用所有 cpu 时间循环的问题。 sleep 功能有效,但它似乎是临时修复,而不是解决方案。

是否有一些函数会阻塞直到变量“条件”变为“真”?还是连续循环是等待变量值改变的标准方法?

最佳答案

这样的轮询绝对是最不受欢迎的解决方案。

我假设你有另一个线程会做一些事情来使条件为真。有几种方法可以同步线程。在您的情况下,最简单的方法是通过对象发出通知:

主线程:

synchronized(syncObject) {
try {
// Calling wait() will block this thread until another thread
// calls notify() on the object.
syncObject.wait();
} catch (InterruptedException e) {
// Happens if someone interrupts your thread.
}
}

其他话题:

// Do something
// If the condition is true, do the following:
synchronized(syncObject) {
syncObject.notify();
}

syncObject 本身可以是一个简单的Object

还有许多其他的线程间通信方式,但使用哪一种取决于您正在做什么。

关于java - java中有 'block until condition becomes true'函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com