0

我正在运行带有多个线程的 ThreadPoolExecutor。我想在线程中操作一些数据,所以我想向线程发送一个对象,并在它完成使用数据后。我知道的唯一方法是等到线程使用 join() 完成,然后使用数据。问题是,我无法从 ThreadPoolExecutor 获得单个线程。我想做这样的事情:

Thread t = ThreadPoolExecutor.getThread();
t.start();
t.join();

其余代码....

有人有办法吗?我知道我可以使用 Callable 但我想避免这种情况,因为我已经有预先存在的代码......

4

1 回答 1

4

是的,你可以submit,得到一个Future支持get()Future

Future<SomeResult> future = executorService.submit(new Callable<SomeResult>(){
    public SomeResult call(){
        //do work
        return new SomeResult();
    }
});

future.get();//suspends the current thread until the SomeResult callable returns.

基本上,call()调用是在池中的线​​程之一上完成的,并且get()挂起当前线程类似于t.join()挂起当前线程的方式。

于 2013-02-07T14:24:09.533 回答