实现run()的有效方法是什么?

jas*_*ine 2 java multithreading

它应该只包含一个循环

while (true) { ... }

我发现它不那么高效,因为它消耗了很多CPU.我希望我的线程能够继续等待,但是最好的方法是让它等待而不消耗这么多CPU?

Ste*_*n C 6

有许多方法可以有效地使用Object.waitObject.notify(参见此处),或使用各种更高级别的Java并发类,如阻塞队列,锁存器,期货,信号量或障碍.

================================================== =

你是正确的,反复测试这个条件是一个非常糟糕的主意; 例如

    while (!condition) {
        // really bad idea ... burns CPU cycles.
    }
Run Code Online (Sandbox Code Playgroud)

以下是一项改进,但仍然存在问题:

    while (!condition) {
        Thread.sleep(...);  // bad idea
    }
Run Code Online (Sandbox Code Playgroud)

问题是,如果将睡眠间隔设置得很短,则循环变得昂贵.但是如果你把它设置得更长(例如一秒左右),那么线程可能需要花费那么长的时间来响应条件变为真.最终结果可以是降低吞吐量和/或缓慢的用户界面.

loop{test; sleep}不幸的是,有时这种方法是最好的选择,但是如果你能避免它,你应该这样做.