JDK中的FutureTask的非同步1 0

2021-10-03 15:09:33 字數 1130 閱讀 3802

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...