多線程-Callable

 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章