【发布时间】:2015-10-30 12:07:14
【问题描述】:
当前情况: 我的代码(假设“类调用者:caller()”)将调用一个类(类 ThreadPoolClass:writeData())的方法,该方法通过 ThreadPoolExecutor 在内部执行它的任务。现在这个实现不会等待它的所有任务终止。
问题: 虽然我的代码(方法调用者())需要等到这个(方法 writeData())ThreadPoolExecutor 的所有任务都完成。目前控制器在提交任务后返回 caller() 方法。
ThreadPoolClass 的实现是无法改变的,所以我想弄清楚如何才能做到这一点。
//示例代码
class Caller {
public static void main(String[] args) {
ThreadPoolClass t = new ThreadPoolClass();
t.writeData();
// I want to wait here until the execution is complete
}
}
class ThreadPoolClass{
void writeData() {
Runnable thread = new Runnable() {
@Override
public void run() {
// Do some database commit operations
}
};
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(1);
fixedThreadPool.submit(thread);
fixedThreadPool.shutdown();
}
}
任何提示都会有所帮助——无论是否可能。
注意**这只是一个示例,我的原始代码有一个类方法调用链,最终使用 ThreadPoolExecutor 执行该方法。
谢谢 菜
【问题讨论】:
-
如果我们能看到一些实际的代码会更容易。基本上,您可以使用 Futures、Executor.awaitTermination(),仅举两个例子。但是,如果不更改 ThreadPoolClass 的代码,就不能说是否有可能。
-
我已经添加了示例代码。请进行相同的验证。
-
如果你想等到执行结束不做其他事情,是否需要使用线程?
-
我看不到不更改 ThreadPoolClass 代码的可能性,除非编写一个新的类做同样的事情,但有可能等待/阻塞或回调。
-
嗨@Zavael 这是一些预先存在的API,我试图在我的应用程序中重用。
标签: java multithreading threadpool threadpoolexecutor