package com.sf.javase.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class MyThread3 implements Callable { // 此时是call方法 @Override public String call() throws Exception { Thread.sleep(2000); return "hello callable"; } public static void main(String[] args) throws ExecutionException, InterruptedException { // Callable Future Callable callable = new MyThread3(); // 用来接收callable执行的结果 FutureTask futureTask = new FutureTask<>(callable); // 相当于把FutureTask作为Runnable传给Thread // 所以Thread执行run()方法时 执行的是FutureTask的run()方法 // 而FutureTask的run()方法 又调用了Callable的call()方法 // 所以最终效果是 call()才是真正的线程执行逻辑 Thread thread = new Thread(futureTask); thread.start(); // 通过get 接收结果 是一种阻塞的等待 String result = futureTask.get(); System.out.println(result); } }