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()方法時,會直接返回結果不會再等待做運算,要跟第一個做下區分