Java 更多线程还是空循环?
在Java中,哪一项被认为更为繁重?实现另一个线程并在当前线程内使用wait notify或合并for/while循环,类似于此>Java 更多线程还是空循环?,java,android,multithreading,for-loop,while-loop,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++; } } 我猜后者不被认为是最佳实践,但我不想在一个额外的线程上花费太多的内存,而这个线程做的很少。如果这是您需要的流程,即“st
while(running){
//do stuff
if(skip == 20){
//do more stuff
skip = 0;
}else{
skip++;
}
}
我猜后者不被认为是最佳实践,但我不想在一个额外的线程上花费太多的内存,而这个线程做的很少。如果这是您需要的流程,即“stuff”和“more stuff”预计不会并行运行,然后计数器/跳过循环就可以了-不要在每20次“填充”之后就发送信号给其他线程运行“更多填充”。(移动到作为答案) 假设你在某处睡觉或者这不是一个无限循环。。。线程用于并行工作;e、 你想在两个不同的核上同时做两件事。如果您不需要它,或者它不适用于您的问题,您就不需要使用额外的线程
如果您没有睡眠或其他阻塞操作,并且这是一个无限循环,那么您只是创建了一个暖手器应用程序(或电池排水器应用程序…)我没有具体的答案,但我想建议遵循一个原则。循环的每个迭代都应该包含一个阻塞操作,阻塞操作应该有一个超时,这样它就不会永远阻塞。如果您没有任何阻塞操作,您可以使用sleep(或者更好,等待一个超时事件,见下文) 如果您想提高中断主循环的责任,请使用事件而不是
bool
标志来控制主循环。这样,当事件发出信号时,循环将立即中断。在伪代码中:
while(!wait_for(cancelLoopEvent, immediate))
{
// do stuff
if(time_to_work())
{
// do the work
}
else
{
wait_for(cancelLoopEvent, loop_timeout)
}
}
当你试着用100%的利用率烧掉整个内核时,你有没有注意到你机器上的风扇发出很大的声音?除此之外,假设你在某处睡觉或者这不是一个无限循环。。。线程用于并行工作。如果你不需要它或者它不适用于你的问题,你就不会使用额外的线程。为了你的处理器,使用一个新的线程。你会让这个可怜的家伙像这样跪在地上。@BrianRoach我会把这当作一个答案xD(顺便说一句,它的手机,没有冷却风扇)@BrianRoach android标签和风扇通常不会在一起:)Doh!错过了。更糟糕的是,你刚刚创造了一个暖手器!是这样吗?其他人似乎不是这么说的。这取决于有多少“更多的东西”吗?@KrzysztofKozielczyk好的,如果我只是想延迟一下,那么线程就是答案吗?@Jack抱歉,我同时删除了我的评论。我意识到我没有真正理解这个问题(我认为它还没有包含足够的数据)。如果
做一些事情
是有意义的工作,需要花费大量时间,那么我同意Martin的建议,循环应该很好。如果这是一个不花时间的简单代码,那么您将创建@BrianRoach指出的暖手器。