futuretask任務的結果只有當任務完成後才能獲取,並且只能通過get系列方法獲取,當結果還沒 出來時,執行緒get系列方法會被阻塞,另外,一旦任務被執行完成,任務不能重啟,除非有哪些時間使用了runandreset方法。
**如下:
public
class
asyncfurureexample
catch
(exception e)
return result;})
;//2.開啟非同步單元執行
thread thread =
newthread
(futuretask,
"threada");
thread.
start()
;//執行任務b
string s =
dosomethingb()
;//同步等待執行緒a結束
string s1 = futuretask.
get();
system.out.
println
("執行a所得:"
+s1+
", 執行b所得:"
+s);
//列印兩個得時間
system.out.
println
(system.
currenttimemillis()
-start);}
public
static string dosomethinga()
catch
(interruptedexception e)
system.out.
println
("-------dosomethinga--------");
return
"a";
}public
static string dosomethingb()
catch
(interruptedexception e)
system.out.
println
("----------dosomethingb------------");
return
"b";
}}
FutureTask原始碼詳解 JDK1 8
jdk1.8修改了futuretask的實現,jkd1.8不再依賴aqs來實現,而是通過乙個volatile變數state以及cas操作來實現。1 繼承結構 2 state欄位 volatile修飾的state欄位 3 其他變數 runner和waiters為volatile型別 4 構造器 5 c...
FutureTask的cancel 方法分析
面試時被問到futurtask的取消原理,沒回答上來,回來閱讀以下原始碼做個記錄。有乙個入參,需要說明task是否是可中斷的 public boolean cancel boolean mayinterruptifrunning 如果是不可中斷的只修改task的狀態為cancelled else i...
JDK6和JDK7中的substring 方法
substring int beginindex,int endindex 方法在jdk6和jdk7中是不同的。明白它們之間的差別可以幫助我們更好的使用這個方法。為了簡單起見,下面使用substring 代替substring int beginindex,int endindex substrin...