拿小票取蛋糕,蛋糕做好了通过future去获取。
FutureTask最后也是继承的Runnable
Callable内部只有一个call方法
package java.util.concurrent;
@FunctionalInterface
public interface Callable<V> {
/**
* Computes a result, or throws an exception if unable to do so.
*
* @return computed result
* @throws Exception if unable to compute a result
*/
V call() throws Exception;
}
Callable的源码。
package thread.tb8;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class Demo {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Callable<Integer> call = new Callable<Integer>() {
@Override
public Integer call() throws Exception { // 放任务
System.out.println("doing........");
Thread.sleep(3000);
return 1;
}
};
FutureTask<Integer> task = new FutureTask<>(call);
Thread thread = new Thread(task);
thread.start();
//do something
System.out.println(" doother1...");
System.out.println(" doother2...");
System.out.println(" doother3...");
System.out.println(" doother4...");
System.out.println(" doother5...");
System.out.println(" doother6...");
Thread.sleep(5000);
System.out.println(" doother7...");
Integer result = task.get();// 执行耗时操作取数据
System.out.println("grt result:" + result);
System.out.println("gohome...");
System.out.println("end");
}
}
打印的结果
重排序
-----------------------tb8--------------------