我在这个问题上遇到同样的问题
Thread hangs when executing a method via reflection
他们没有注意到的问题是.invoke方法。 当我在下一个片段上注释.invoke方法时,Callables会返回所需的“Future”值。
这是我的Callable实现:
public class ParallelCallable implements Callable<Boolean> {
private Class _class;
private Method _method;
public ParallelCallable(ParallelPair pair) {
this._class = pair.getClassType();
this._method = pair.getMethod();
}
public Boolean call() {
Boolean done;
try {
this._method.invoke(null, this._class.newInstance()); // All threads hangs on this line.
done = true;
} catch(Exception ex) {
ex.printStackTrace();
done = false;
}
return done;
}
}
接下来的代码就是我将callables提交给ExecutorService的地方:
List<Callable<Boolean>> tasks = new ArrayList<Callable<Boolean>>();
ExecutorService pool = Executors.newFixedThreadPool(10);
try {
futures = pool.invokeAll(this.tasks);
pool.shutdown();
// Wait until all threads are finish
while (!pool.isTerminated()) {
}
boolean isLoaded;
for (Future<Boolean> future : futures) {
isLoaded = future.get();
}
} catch (Exception ex) {
ex.printStackTrace();
}
“this.tasks”是ParallelCallable对象的列表。
所有线程都悬挂在“this._method.invoke(...)”行上。我调用的方法是public static,并且根本没有抛出异常。
谢谢,我希望你能帮助我!