[英]Why do jdk need to use "final" to create object of "Semaphore"?
它是不需要更改的“信號量”對象嗎?
將available
字段聲明為final
可確保該字段的值對所有線程可見,而無需任何其他同步。 這是必要的,因為您有兩個方法( getItem
和putItem
)在沒有任何同步的情況下使用該字段。
如果省略final
,則有可能某些線程可能會看到available
的預初始化值(即null
)並在第一次調用getItem
方法時獲得 NPE。
(根據設計或偶然,這不是putItem
方法中的問題。在訪問available
之前,您正在調用markAsUsed
markAsUsed
方法this
進行同步, this
應該提供所需的發生前,以保證線程然后看到適當的available
價值。)
值得注意的是,將永遠不應更改的字段聲明為final
是(通常)好的做法。 如果不出意外,這將記錄您的意圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.