【发布时间】:2017-03-03 07:56:51
【问题描述】:
我创建了一个Callable,它应该进行syncExec 调用。我将 Callable 委托给 RecursiveTask (ForkJoinPool) 的子类,该子类执行 Callable 的 call 方法。问题是 run 方法中的代码永远不会到达。你知道为什么以及如何解决这个问题吗?
public class someClass{
public static void main (String[] args){
Callable<Object> c = new Callable<Object>() {
@Override
public Object call() throws Exception {
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
@Override
public void run() {
System.out.println("hi");
}
});
return null;
}
});
ATLockTask task = new ATLockTask();
task.setCallable(c);
ForkJoinPool pool = new ForkJoinPool();
pool.invoke(task);
}
}
public class ATLockTask extends RecursiveTask<Object[]>{
Callable callable;
@Override
protected Object[] compute() {
try {
callable.call();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
【问题讨论】:
-
您在控制台中看到堆栈跟踪吗?
-
我们需要看到更接近minimal reproducible example 的东西,我们可以实际测试。
-
我不知道如何使该示例更小。这是最小的完整示例。
-
@RüdigerHerrmann 不,未达到 printStackTrace。调用方法没有完成。它只是在 syncExec 语句处停止。
-
现在,我创建了一个您可以测试的完整示例。
标签: java concurrency eclipse-plugin runnable callable