我有以下问题:
答案 0 :(得分:1)
只要您不做任何更改,您就可以将搜索视为只读。在这种情况下,您可能不需要同步。如果您想快速搜索,请不要直接使用线程,而是使用runnables并查找相应的类。如果直接使用线程,请确保不要超过处理器数量。
在进一步研究之前,请阅读多线程。我会提到“Java Concurrency in Practice”作为(相当安全的)推荐。这很容易出错。
答案 1 :(得分:0)
我不确定您的问题陈述是否在不同列表中的搜索之间存在顺序依赖关系,即第一个列表中的搜索结果是否应优先于第二个列表中的搜索结果。
假设没有这样的依赖,所以任何列表中的任何搜索结果都没问题,然后在Ateji PX中以非常简洁的方式表达为推测搜索:
Object parallelSearch(Collection<List> lists)
{
// start of parallel block
[
// create one parallel branch for each of the lists
|| (List list: lists) {
// start searching lists in parallel
Object result = search(list);
// the first branch that finds a result returns it,
// thereby stopping all remaining parallel branches
if(result != null) return result;
}
]
}
术语“推测”意味着您并行运行多个搜索,但您知道只使用其中一个搜索结果。然后,只要您在其中一个搜索中找到结果,就要停止所有剩余的搜索。
如果您在4核计算机上运行此代码,Ateji PX运行时将一次安排4个并行分支,以便充分利用可用的并行硬件。