【发布时间】:2018-09-15 19:51:54
【问题描述】:
我写了一个这样的同步for循环:
for (Map.Entry<String, CustomClass> entry : assocs.entrySet()) {
String key = entry.getKey();
CustomClass value = entry.getValue();
value.tick(key);
}
问题是有时(很少).tick 挂起。如果是单个.tick,没什么大不了的,它会在一段时间后自行修复,实际上根本不重要(这是由于客户端的互联网速度较慢)。但如果它耽误了其他人,那就是个问题了。
所以我希望每个循环体都运行而不等待其他循环体完成。
【问题讨论】:
-
记住:除非tick需要很长时间,否则线程会减慢你的速度。不是想劝阻你,只是说线程并不总是答案,你应该确保测量结果的性能(之前和之后)。
-
减轻压力,使用流。
-
@Taslim 我从来没有听说过流,它是如何工作的?
-
@BillK 我不一定需要线程它(或者我?),问题是有时(很少)
.tick挂起并导致整个应用程序出现问题。如果单个.tick挂起没问题,一段时间后它会自行修复,但如果它延迟其余的,那就是问题 -
如果您希望一个启动而另一个仍在运行,那么您需要一个线程。您需要注意,“tick”中的所有代码都必须是线程安全的。使用并行流方法,您将一次触发许多滴答声,我认为这不是您想要的(根据“滴答声”一词的性质猜测)。
标签: java multithreading loops asynchronous