歡迎您光臨本站 註冊首頁

Java Callable接口實現細節詳解

←手機掃碼閱讀     limiyoyo @ 2020-05-02 , reply:0

代碼如下
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * @author lzq * @data 2020/4/30 0030 - 下午 4:02 */ public class Test2 { public static void main(String[] args) throws ExecutionException, InterruptedException { MyThread thread=new MyThread(); FutureTask task = new FutureTask(thread); new Thread(task,"a").start(); new Thread(task,"b").start(); System.out.println(task.get()); } } class MyThread implements Callable

{ @Override public String call() { System.out.println("實現callable"); return "得到返回值"; } }

上面是使用Callable接口簡單實現多線程,使用這個接口要使用FutrueTask類作為簡單的適配類,因為Thread構造方法只能接受Runnable接口參數,下面源碼中看出FutrueTask的對象為什麼也能作為Runnable型參數傳給Thread構造方法
再分析一下結果,可以看到明明啟動了a,b兩個線程,但是隻輸出了一個線程的結果,這是因為運行的結果會被緩存,使得線程的執行效率變高。還有一點就是獲取線程返回值的get方法可能會產生阻塞,一般放在最後或者使用異步通信來處理。

[limiyoyo ] Java Callable接口實現細節詳解已經有236次圍觀

http://coctec.com/docs/java/show-post-232581.html