Oracle官方併發教程之乙個同步類的例子

2021-09-23 21:27:22 字數 2193 閱讀 5884

synchronizedrgb是表示顏色的類,每乙個物件代表一種顏色,使用三個整形數表示顏色的三基色,字串表示顏色名稱。

01publicclasssynchronizedrgb

17}

18

19publicsynchronizedrgb(intred,

20intgreen,

21intblue,

22string name)

29

30publicvoidset(intred,

31intgreen,

32intblue,

33string name)

41}

42

43publicsynchronizedintgetrgb()

46

47publicsynchronizedstring getname()

50

51publicsynchronizedvoidinvert()

57}

使用synchronizedrgb時需要小心,避免其處於不一致的狀態。例如乙個執行緒執行了以下**:

1synchronizedrgb color =

2newsynchronizedrgb(0,0,0,"pitch black");

3...

4intmycolorint = color.getrgb();//statement 1

5string mycolorname = color.getname();//statement 2

如果有另外乙個執行緒在statement 1之後、statement 2之前呼叫了color.set方法,那麼mycolorint的值和mycolorname的值就會不匹配。為了避免出現這樣的結果,必須要像下面這樣把這兩條語句繫結到一塊執行:

1synchronized(color)

這種不一致的問題只可能發生在可變物件上。 

Oracle官方併發教程之乙個同步類的例子

synchronizedrgb是表示顏色的類,每乙個物件代表一種顏色,使用三個整形數表示顏色的三基色,字串表示顏色名稱。01publicclasssynchronizedrgb 17 18 19publicsynchronizedrgb intred,20intgreen,21intblue,22s...

Oracle官方併發教程之活躍度

乙個併發應用程式能及時執行的能力稱為活躍性。本節將介紹最常見的活躍性問題 死鎖 deadlock 以及另外兩個活躍性問題 飢餓 starvation 和活鎖 livelock 死鎖描述了這樣一種情景,兩個或多個執行緒永久阻塞,互相等待對方釋放資源。下面是乙個例子。alphone和gaston是朋友,...

Oracle官方教程之Fork Join

ork join框架是executorservice介面的一種具體實現,目的是為了幫助你更好地利用多處理器帶來的好處。它是為那些能夠被遞迴地拆解成子任務的工作型別量身設計的。其目的在於能夠使用所有可用的運算能力來提公升你的應用的效能。類似於executorservice介面的其他實現,fork jo...