代码之家  ›  专栏  ›  技术社区  ›  krosenvold

如果不使用ExecutorService,我如何获得未来的<MyObject>?

  •  14
  • krosenvold  · 技术社区  · 16 年前

    我真的很想这样做:

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

    使用“Callable/Future”模式,因为我以后可能需要引入执行器,但就目前情况而言,它们只是开销。

    3 回复  |  直到 16 年前
        1
  •  19
  •   alphazero    16 年前

    试试未来任务。它对Executor框架没有任何明确的依赖关系,可以按原样实例化,也可以扩展它来定制它。

        2
  •  15
  •   Community CDub    8 年前

    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's answer ,你会用 FutureTask 这样地:

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

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

        3
  •  1
  •   Chris Dail    16 年前

    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();
    

    x.getResult();