【发布时间】:2022-01-23 01:24:14
【问题描述】:
在数组中搜索数字的普通版本:
boolean search(int x, int[] arr) {
for (int i : arr) {
if (i == x) {
return true;
}
}
return false;
}
我的多线程方式:
boolean searchAsync(int x, int[] arr, int lo, int hi) {
if (lo == hi) {
return x == arr[lo];
}
int mid = (lo + hi) / 2;
CompletableFuture<Boolean> cf = CompletableFuture.<Boolean>supplyAsync(() -> searchAsync(x, arr, lo, mid));
boolean b = searchAsync(x, arr, mid + 1, hi);
return cf.thenApply(a -> a | b).join();
}
boolean searchAsync(int x, int[] arr) {
return searchAsync(x, arr, 0, arr.length - 1);
}
但它不返回任何东西
【问题讨论】:
-
“它不返回任何东西”是什么意思?您是否有一个拥有实际数据的实际调用者?
-
为我工作。我只是将方法设为静态并在 main 方法中运行它们。
-
请注意,这种实现效率不会很高,因为它将调度与数组中的元素一样多的作业。此外,由于增加了开销,多线程这仅与大型数组相关。无论如何,在这里使用并行流会更合适、更简单。
标签: java multithreading concurrency parallel-processing completable-future