【发布时间】:2021-02-10 16:03:09
【问题描述】:
我有办法
public boolean contains(int valueToFind, List<Integer> list) {
//
}
如何将数组拆分为 x 个块?并有一个新线程来搜索每个块以查找值。如果方法返回true,我想阻止其他线程搜索。
我看到有很多简单地在线程之间拆分工作的示例,但是我如何构建它以便一旦一个线程返回 true,所有线程都返回它作为答案?
出于这个原因,我不想使用并行流(来自source):
如果您这样做,请再次查看前面的示例。有一个大 错误。你看到了吗?问题是所有并行流都使用 常见的fork-join线程池,如果你提交一个长时间运行的任务, 您有效地阻塞了池中的所有线程。因此,您阻止 所有其他使用并行流的任务。想象一个 servlet 环境,当一个请求调用 getStockInfo() 而另一个 计数素数()。一个会阻止另一个,即使他们每个人 需要不同的资源。更糟糕的是,你不能指定线程 并行流池;整个类加载器必须使用相同的 一个。
【问题讨论】:
-
我想你不明白这个问题。您不希望“所有线程都返回”。您基本上忽略了所有其他线程。但请注意:除非这是出于学习目的,否则您应该使用提供给您的流解决方案。我希望您明白,您的列表需要非常大才能通过使用多个线程来获得“加速”。
标签: java multithreading performance parallel-processing java-threads