我目前正在尝试对我以前的程序进行多线程处理。下面是代码:
public class DipoleTester {
public static String DIR = "/home/";
public static void main(String[] args) throws InterruptedException {
Dipole trial;
ExecutorService service =
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
for (int r = 10; r < 150; r += 1) {
double radius = (double) r / 10000.0;
for (int matType = 0; matType < 3; matType++) {
String name = matType + "_rad" + radius;
trial = new DipoleSimple(DIR, name);
trial.materialType = matType;
trial.RADIUS = radius;
service.submit(trial);
}
}
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.HOURS);
}
}
这是一个非常简单的程序。run() 只是一个非常基本的方法,曾经是 main() 方法。平均而言,评估大约需要 3 分钟。问题是在这里,它似乎只是对 run() 进行异步调用,因为它会立即评估整个线程池。
即我希望它在 3-5 分钟内并行运行 8 个线程。但是相反,它运行每个线程并说它几乎立即完成并加载线程池中的下一个线程。所以我剩下几百个线程都试图同时运行。
知道发生了什么吗?