簡體   English   中英

為什么jdk需要使用“final”來創建“Semaphore”的對象?

[英]Why do jdk need to use "final" to create object of "Semaphore"?

它是不需要更改的“信號量”對象嗎?

available字段聲明為final可確保該字段的值對所有線程可見,而無需任何其他同步。 這是必要的,因為您有兩個方法( getItemputItem )在沒有任何同步的情況下使用該字段。

如果省略final ,則有可能某些線程可能會看到available的預初始化值(即null )並在第一次調用getItem方法時獲得 NPE。

(根據設計或偶然,這不是putItem方法中的問題。在訪問available之前,您正在調用markAsUsed markAsUsed方法this進行同步, this應該提供所需的發生前,以保證線程然后看到適當的available價值。)


值得注意的是,將永遠不應更改的字段聲明為final是(通常)好的做法。 如果不出意外,這將記錄您的意圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM