[英]Odd behavior with Runnable and ExecutorService
我在多线程中遇到了一些非常奇怪的行为。 我有两个类:DipoleTester和Dipole。
DipoleTester尝试创建多个Dipole对象,然后异步运行它们。 问题是DipoleTester只是一次运行所有其Dipole对象,而不是一次运行2个。
这是DipoleTester:
public class DipoleTester {
public static String DIR = "./save/";
public static void main(String[] args) throws InterruptedException {
Dipole trial;
ExecutorService service = Executors.newFixedThreadPool(2);
for (int r = 10; r < 13; r += 1) {
double radius = (double) r / 10000.0;
for (int matType = 0; matType < 3; matType++) {
String name = "Simple_mat"+matType + "_rad" + radius;
trial = new DipoleSimple(DIR + "Simple/", name);
trial.materialType = matType;
trial.RADIUS = radius;
service.submit(trial);
}
}
service.shutdown();
service.awaitTermination(100, TimeUnit.HOURS);
}
}
这是偶极子的(相关位)
public abstract class Dipole implements Runnable{
...
public void run() {
initiate();
}
public void initiate() {
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date) + ": Starting: " + NAME);
model = ModelUtil.create(NAME);
model.modelNode().create("mod1");
makeParams();
makeVariables();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
...
}
现在的问题是,即使使用thread.sleep(5000),所有线程也会一次执行! 我不知道发生了什么事。 这是控制台输出:
05/08/2013 19:17:31: Starting: Simple_mat0_rad0.001
05/08/2013 19:17:31: Starting: Simple_mat1_rad0.001
05/08/2013 19:17:31: Starting: Simple_mat2_rad0.001
05/08/2013 19:17:31: Starting: Simple_mat0_rad0.0011
05/08/2013 19:17:31: Starting: Simple_mat1_rad0.0011
05/08/2013 19:17:31: Starting: Simple_mat2_rad0.0011
05/08/2013 19:17:31: Starting: Simple_mat0_rad0.0012
05/08/2013 19:17:31: Starting: Simple_mat1_rad0.0012
05/08/2013 19:17:31: Starting: Simple_mat2_rad0.0012
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.