【发布时间】:2019-05-11 16:56:58
【问题描述】:
我有网络要求,迫使我将请求发送空闲 2 秒
requester = new Thread(){
@Override
public void run(){
buildRequest();
Thread.sleep(requestDelay);
} catch( InterruptedException e){
// keep idle for the remaining time still
// interrupted at 1s need to sleep 1 second more
e.printStackTrace();
}
sendRequest();
}
}
是否有可能在循环消耗 CPU 的情况下仍然休眠剩余时间?如果是是最好的方法?
【问题讨论】:
-
当然可以,但最好不要睡觉。使用响应模式在几分钟后触发甚至唤醒请求 - 这样您就不会“浪费”线程。
-
中断不是偶然发生的。如果您的线程被中断,则有人明确要求它停止正在执行的操作并正常退出。您确定要忽略它吗?
-
Guava 有
Uninterruptibles.sleepUninterruptibly。基本上,它只是记录线程被中断的事实,清除标志,然后重新进入睡眠状态。一旦完整时间到期,如果被中断,它将重新中断。 -
我知道从一开始就睡觉是个坏主意。但是考虑到这个选项,从剩余时间开始,在 catch 范围内是否适合另一个睡眠?
标签: java multithreading sleep