簡體   English   中英

多線程訪問數組

[英]multiple threads access array

class EverythingMustBeInAClass
{
    private final int i = 42;
    private final int[] a = {2, 3, 5, 7, 11, 13, 17, 19};
}

i被聲明為final的事實保證了所有線程都看到相同的int值42(而不是0)。

a聲明為final的事實保證了所有線程都可以看到相同的數組引用

但是,如何確保所有線程都看到相同的數組元素 (而不是0)? 即使以后不再打算更改數組元素,我也必須同步對數組的訪問嗎?

final保證不僅可以看到數組引用,而且還可以保證對象本身已被完全構造和初始化。 因此,所有線程也將看到數組中的值。

這是一個很好的主題鏈接:

http://www.javamex.com/tutorials/synchronization_final.shtml

報價:

還可以保證通過最終引用訪問的任何對象上的字段至少與構造函數退出時的字段保持最新。

然而,值得注意的是,它是重要的a陣列並不是一成不變的,從而,例如,可以設置a[0] = 10 ,並且更新將不同步。 但只要你改變任何值a你應該不錯。

如果您永遠都不會更改內容,那么由於“語義之前發生”和最終的更改,您是安全的。

不,如果數據結構使用關鍵字final,則不必同步訪問。 只要您從不寫入變量,就可以同時進行多次讀取。 如果不使用final關鍵字,則需要在任何時候訪問該變量。

暫無
暫無

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

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