package com.day03;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
/**
* @author anyan
* @date 2021/5/15-22:03
*/
/*
实现线程执行的第三种方式:实现Callable接口
*/
public class FutureTaskTest {
public static void main(String[] args) throws Exception {
//新建未来任务对象,以匿名内部类的方式实现Callable接口
FutureTask ftt=new FutureTask(new Callable() {
//call方法返回值为一个Obeject对象,相当于线程中的run()方法,区别在于返回值类型
@Override
public Object call() throws Exception {
System.out.println("call method begin");
Thread.sleep(1000*4);
System.out.println("call method over");
int a=1;
int b=2;
return a+b;
}
});
Thread t=new Thread(ftt);
t.start();
Object obj=ftt.get();//获取返回值类型对象
//此方式有个缺陷:未来任务线程在调用get()返回值方法时,会阻碍main 线程的执行
//以下代码必须先等待ftt.get()执行结束才能执行,而get()方法执行时间往往比较长。
System.out.println("执行结果返回值"+obj);
System.out.println("main continue");
}
}