2012-08-25 36 views
1

如果我有一個SomeClass類型的變量和它的一個公共成員,比如說public int counter將被多個線程訪問,那麼如果我無法修改SomeClass,該如何在該成員字段聲明volatile?理想情況下,我猜counter將被宣佈爲volatile,但我無法做到這一點。如何將對象的成員字段聲明爲volatile?

+2

你不能。相反,外部同步您訪問該領域是否足夠? – cheeken

+0

使用鎖保護對字段的訪問是否意味着讀取線程不會使用緩存值? – Phillip

+0

@飛利浦否,使用鎖並不能保證你正在尋找的內存障礙。 – oldrinb

回答

3

你試圖實現的是與單獨的編譯不兼容,因此是不可能的。 volatile限定符指示編譯器在每次訪問時對變量進行不同的處理,因此每次從該模塊訪問該變量到您無權訪問的源變量都需要更改。由於該模塊已經編譯完成,因此不可能改變它處理某些變量的方式。