Java 当线程被中断时,继续休眠剩余时间
我有网络要求,要求我空闲发送请求2秒Java 当线程被中断时,继续休眠剩余时间,java,multithreading,sleep,Java,Multithreading,Sleep,我有网络要求,要求我空闲发送请求2秒 requester = new Thread(){ @Override public void run(){ buildRequest(); Thread.sleep(requestDelay); } catch( InterruptedException e){ // keep idl
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的情况下,是否可以在剩余时间内保持睡眠?如果是最好的方法?如果我理解正确,您希望在执行
sendRequest
之前以不确定延迟的方式处理中断异常。好的,因为当线程上有东西调用interrupt()
时,就会发生InterruptedException
,所以catch块不会被执行,所以您不必担心
你的方法不太正确,被动的方法会更好。即使是基本的也更好 如果我理解正确,您希望在执行sendRequest
之前以不确定延迟的方式处理中断异常。好的,因为当线程上有东西调用interrupt()
时,就会发生InterruptedException
,所以catch块不会被执行,所以您不必担心
你的方法不太正确,被动的方法会更好。即使是基本的也更好 当然有可能,但最好不要睡觉。即使在几分钟后唤醒请求,也可以使用一种反应模式来触发一个请求,这样你就不会“浪费”线程。中断不是偶然发生的。如果您的线程被中断,则有人明确要求它停止正在执行的操作并优雅地退出。你确定要忽略这个吗?番石榴有。基本上,它只是记录线程被中断的事实,清除标志,然后返回睡眠状态。一旦全部时间结束,如果它被中断,它就会重新中断。我知道从一开始睡觉就不是个好主意。但是考虑到这个选项,在剩余的时间里,在catch范围内是否有另一个睡眠是合适的呢?当然有可能,但最好不要睡觉。即使在几分钟后唤醒请求,也可以使用一种反应模式来触发一个请求,这样你就不会“浪费”线程。中断不是偶然发生的。如果您的线程被中断,则有人明确要求它停止正在执行的操作并优雅地退出。你确定要忽略这个吗?番石榴有。基本上,它只是记录线程被中断的事实,清除标志,然后返回睡眠状态。一旦全部时间结束,如果它被中断,它就会重新中断。我知道从一开始睡觉就不是个好主意。但是考虑到这个选项,从剩余时间开始,在catch范围内是否还需要另一个睡眠?