在Java中,这被认为更加沉重?实现另一个线程并使用wait notify或在当前线程中包含for / while循环,类似于>
while(running){
//do stuff
if(skip == 20){
//do more stuff
skip = 0;
}else{
skip++;
}
}
我会猜测后者不被认为是最佳做法,但我不想最终在一个额外的线程上花费太多内存。
答案 0 :(得分:2)
(转而回答)
假设你在某个地方睡觉或者这不是一个无限循环......线程用于工作的并行化;例如你想在两个不同的核心上同时做两件事。如果您不需要它或它不适用于您的问题,则不使用其他线程。
如果您没有睡眠或其他阻止操作并且它是无限循环,您只需创建一个暖手应用程序(或电池滤水器应用程序......)
答案 1 :(得分:0)
如果这是您需要的流程,即“东西”和“更多东西”不会并行运行,那么计数器/跳过循环就可以了 - 不要发信号通知其他线程只是为了运行'更多的东西'每20个'之后'。'
答案 2 :(得分:0)
我没有具体的答案,但我想建议遵循的原则。循环的每次迭代都应该包含一个阻塞操作,阻塞操作应该有一个超时,这样它就不会永远阻塞。如果你没有任何阻塞操作,你可以使用sleep(或者更好,等待超时的事件,见下文)。
如果您想要改善破坏主循环的责任,请使用事件而不是bool
标志来控制主循环。这样,当事件发出信号时,循环将立即中断。在伪代码中:
while(!wait_for(cancelLoopEvent, immediate))
{
// do stuff
if(time_to_work())
{
// do the work
}
else
{
wait_for(cancelLoopEvent, loop_timeout)
}
}