jas*_*ine 2 java multithreading
它应该只包含一个循环
while (true) { ... }
我发现它不那么高效,因为它消耗了很多CPU.我希望我的线程能够继续等待,但是最好的方法是让它等待而不消耗这么多CPU?
有许多方法可以有效地使用Object.wait和Object.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}不幸的是,有时这种方法是最好的选择,但是如果你能避免它,你应该这样做.
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |