1.FutureTask是Runnable接口的实现类,刚好构造器方法可以传入Callable.,然后就可以通过

new Thread(new FutureTask(new Callable())).start()类似方法创建线程执行,习惯使用lambda表达式。

 

 

代码如下:


class MyThread1 implements  Runnable {

@Override
public void run() {

}
}

class MyThread2 implements Callable<Integer> {

@Override
public Integer call() throws Exception {
System.out.println(Thread.currentThread().getName()+" come in callable");
return 200;
}
}


public class CallableTest {
public static void main(String[ ]args) throws ExecutionException, InterruptedException {

// FutureTask<Integer> futureTask1 = new FutureTask<>(new MyThread2());
FutureTask<Integer> futureTask2 = new FutureTask<>(() -> {
System.out.println(Thread.currentThread().getName()+" come in callable");
return 1000;
});

// new Thread(new MyThread1(),"t1").start();
// new Thread(futureTask1,"t2").start();

new Thread(futureTask2,"t3").start();
while (!futureTask2.isDone()) {
System.out.println("wait-----");
}

// System.out.println(futureTask1.get());
System.out.println(futureTask2.get());
System.out.println(futureTask2.get());
System.out.println(Thread.currentThread().getName()+ " 执行完毕");

}
}
 

结果如下:

 

 

 

总结: 

注意,当第二次调用futureTask2.get()方法时,会直接返回结果不会再等待做运算,要跟第一个做下区分

 

posted on 2021-07-18 11:39  从精通到陌生  阅读(192)  评论(0编辑  收藏  举报