Java事件循环,轻轻地睡觉

时间:2013-01-08 14:51:21

标签: java sleep event-loop

我正在做一种事件循环来处理Java中的多个非阻塞套接字。 问题是,当我不接触循环时,它使用整个核心。 (例如,我有一个四核,每次启动我的程序时,CPU每次都会跳到25%。)

我知道我可以使用Thread.sleep()来减慢处理器的使用速度,但我想知道是否有正确的方法。我觉得Thread.sleep(1)可能会限制我的事件循环。

所以我的问题是,我应该怎么做?有没有正确的方法呢?我应该减少线程的优先级吗?我应该使用Thread.sleep(0,someNanosecondsAmount)吗?

1 个答案:

答案 0 :(得分:2)

所有睡眠方法将在1 ms内至少休眠。你可以使用较短但通常不会放弃CPU的yield()。

如果您正忙着等待一组套接字,您将最终使用整个cpu,否则您将有毫秒级的延迟。

更好的解决方案是使用Selector等待Socket准备好使用或者使用每个连接的线程阻止NIO。

相关问题