我需要在Java应用程序中执行并行任务。现在,我有一个实现Callable<DMI>
的java类,其中DMI是我在JSF bean中使用的对象。
问题是所有Callable对象都在同一个线程中运行,然后只有在完全执行所有这些对象之后,线程才会发生变化。我想在不同的线程上运行每个对象。我究竟做错了什么?
类可调用
public class ModuloCallable implements Callable<DMI> {
private final String NOME;
private final String URL;
public ModuloCallable(String nome, String url) {
this.NOME = nome;
this.URL = url;
}
@Override
public DMI call() {
try {
/* Some code here to generate a DMI object */
System.out.println("Thread number: " + Thread.currentThread().getId());
return dmi;
}
} catch (NullPointerException e) {
return null;
}
return null;
}
}
Java应用程序
public void buscar() {
ExecutorService executor = Executors.newCachedThreadPool();
ModuloCallable G1C = new ModuloCallable("n1", "url1")
ModuloCallable G2C = new ModuloCallable("n2","url2");
ModuloCallable G3C = new ModuloCallable("n3","url3");
DMI geradorG1 = getFutureValue(G1C, executor);
DMI geradorG2 = getFutureValue(G2C, executor);
DMI geradorG3 = getFutureValue(G3C, executor);
executor.shutdown();
}
public DMI getFutureValue(ModuloCallable mc, ExecutorService e) {
Future<DMI> f = e.submit(mc);
DMI dmi;
try {
dmi = f.get();
return dmi;
} catch (InterruptedException | ExecutionException ex) {
System.out.println(ex.getMessage());
return null;
}
}
}
输出示例
Thread number: 150
Thread number: 150
Thread number: 150
如果我按顺序多次调用buscar方法,那么我会有类似的东西:
Thread number: 150
Thread number: 150
Thread number: 150
Thread number: 151
Thread number: 151
Thread number: 151
我想要类似的东西:
Thread number: 148
Thread number: 149
Thread number: 150