更多线程还是空循环?

时间:2012-02-09 21:36:32

标签: java android multithreading for-loop while-loop

在Java中,这被认为更加沉重?实现另一个线程并使用wait notify或在当前线程中包含for / while循环,类似于>

while(running){

 //do stuff

   if(skip == 20){

      //do more stuff
      skip = 0;

   }else{
      skip++;
   }
   }

我会猜测后者不被认为是最佳做法,但我不想最终在一个额外的线程上花费太多内存。

3 个答案:

答案 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)
    }
}