如何在不使用ExecutorService的情况下获得Future<MyObject>?

2022-09-03 00:16:21

我真的很想做这样的事情:

 Callable<MyObject> myCallable = ....
 Future<MyObject> = new Thread( myCallable).start();

我基本上想启动一个与我的主要任务并行运行的单个长时间运行的任务,并且我不希望池化或线程重用。Executors的东西似乎非常以池化为导向,它需要我关闭池,所有这些都是我不想做的。

我想使用“Callable/Future”模式,因为我以后可能不得不介绍Executers,但就目前的情况来看,它们只是开销。

有什么建议吗?


答案 1

试试 FutureTask。它对 Executor 框架没有任何显式依赖关系,可以按原样实例化,也可以扩展它以对其进行自定义。


答案 2

好吧,你可以相当容易地编写一个帮助器方法:

public static Future<T> createFuture(Callable<T> callable)
{
    ExecutorService service = Executors.newSingleThreadExecutor();
    Future<T> ret = service.submit(callable);
    // Let the thread die when the callable has finished
    service.shutdown();
    return ret;
}

编辑:要扩展alphazero的答案,你可以像这样使用:FutureTask

FutureTask<MyObject> future = new FutureTask<MyObject>(myCallable);
new Thread(future).start(); // FutureTask implements Runnable
// Now use the future however you want

是的,我会说这比我的第一个答案更好:)