Java 我怎样才能获得未来<;MyObject>;不使用服务?
我真的很想这样做:Java 我怎样才能获得未来<;MyObject>;不使用服务?,java,multithreading,Java,Multithreading,我真的很想这样做: Callable<MyObject> myCallable = .... Future<MyObject> = new Thread( myCallable).start(); FutureTask<MyObject> future = new FutureTask<MyObject>(myCallable); new Thread(future).start(); // FutureTask implements Run
Callable<MyObject> myCallable = ....
Future<MyObject> = new Thread( myCallable).start();
FutureTask<MyObject> future = new FutureTask<MyObject>(myCallable);
new Thread(future).start(); // FutureTask implements Runnable
// Now use the future however you want
Callable myCallable=。。。。
Future=新线程(myCallable).start();
我基本上希望启动一个与主任务并行运行的长时间运行的任务,而不希望使用池或线程重用。执行者的东西似乎非常面向池,它需要我关闭池,所有这些我都不想做
我想使用“Callable/Future”模式,因为我以后可能需要引入执行者,但目前的情况是,它们只是开销
有什么建议吗?好吧,你可以很容易地编写一个助手方法:
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;
}
是的,我想说这比我的第一个答案要好:)试试FutureTask。它对Executor框架没有任何明确的依赖性,可以按原样实例化,也可以扩展它来定制它。可调用/未来的东西是基于线程池的。如果您需要多次执行相同的操作,我强烈建议您使用池 如果您不想使用线程池,那么我建议手动使用线程。通过使用一根线并在上面连接,你想做什么并不难
class X extends Thread {
MyObject result;
public void run() {
// .. do the operation here. Set result
}
public MyObject getResult() {
// This will block until the thread is complete
join();
return result;
}
}
要运行此呼叫,请执行以下操作:
X x = new X();
x.start();
最终,您将调用getResult,它将阻塞直到X的线程完成:
x.getResult();
ExecutorService频繁实例化并多次关闭是否可以?它不是要被重用吗?@AwanBiru:问题是关于一个长期运行的任务,这就是我给出这个答案的原因。我认为创建大量的
ExecutorServices
是可以的,但并不理想,但最好根据实际情况提出一个新问题-尤其是这个问题/答案已经有10年历史了,可能会有新的方法。(我已经有一段时间没有专业地使用Java了。)谢谢你的提醒。按照你的建议,……我会的。