线程类Runnable是没有返回结果的,如果想要得到线程的计算结果可以使用Callable类。FutureTask类实现了RunnableFuture接口, RunnableFuture接口继承了Runnable和Future接口。JAVA中可以使用ExecutorService配合Future接口来实现异步计算。

简单的FutureTask+Thread获得线程的计算结果代码如下

 public static void main(String[] args)
 {
        
     FutureTask<Integer> task = new FutureTask<Integer>(new Callable<Integer>()
     {
            
         public Integer call() throws Exception
         {
             TimeUnit.SECONDS.sleep(5);
             int sum = 0;
             for (int i = 0; i < 10000; i++)
             {
                 sum += i;
             }
             return sum;
         }
     });
        
     Thread thread = new Thread(task);
     thread.start();
     try
     {
         // get 方法会阻塞线程,直到拿到结果
         Integer result = task.get();
         System.out.println("我是结果:" + result);
     }
     catch (InterruptedException e)
     {
         e.printStackTrace();
     }
     catch (ExecutionException e)
     {
         e.printStackTrace();
     }
     System.out.println("最后打印.....");
 }

 结果:

我是结果:49995000
最后打印.....