我刚刚开始使用 Java 中的线程。我有一个简单的算法,可以进行大量计算。我需要做的是将这些计算分配给不同的线程。它看起来像这样:
while(...) {
....
doCalculations(rangeStart, rangeEnd);
}
我想做的是这样的:
while(...) {
...
// Notify N threads to start calculations in specific range
// Wait for them to finish calculating
// Check results
... Repeat
}
计算线程不必有临界区或彼此同步,因为它们不更改任何共享变量。
我想不通的是如何命令线程开始并等待它们完成。
thread[n].start() 和 thread[n].join() 抛出异常。
谢谢!
最佳答案
我使用一个 ExecutorService
private static final int procs = Runtime.getRuntime().availableProcessors();
private final ExecutorService es = new Executors.newFixedThreadPool(procs);
int tasks = ....
int blockSize = (tasks + procss -1) / procs;
List<Future<Results>> futures = new ArrayList<>();
for(int i = 0; i < procs; i++) {
int start = i * blockSize;
int end = Math.min(tasks, (i + 1) * blockSize);
futures.add(es.submit(new Task(start, end));
}
for(Future<Result> future: futures) {
Result result = future.get();
// check/accumulate result.
}
关于java - 在多个线程之间划分计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893379/