使用反射调用ExecutorService中的方法

时间:2015-08-08 05:33:35

标签: java multithreading parallel-processing

我在这个问题上遇到同样的问题

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,并且根本没有抛出异常。

谢谢,我希望你能帮助我!

0 个答案:

没有答案