2014-03-31 131 views
0

我有多個線程和一個變量。我在一個字符串中將此變量設置爲字符串值,然後在另一個線程中使用該最新變量。但它似乎並沒有跨線程更新。我已經設置了變量作爲跨線程更新線程

public volatile String userInput = null; 

該變量被用作:

Server s = new Server(); 
while (s.userInput==null) 
    { 
    } 
System.out.println(s.userInput); 
command = s.userInput; 

等待直到變量具有一個值,然後分配在當前類到它的一個變量。該變量在Server類中設置。

它需要別的東西嗎?或者是不穩定的錯誤?謝謝,非常感謝:)

+0

您應該向我們展示您使用此字段的位置。 –

+0

你甚至可以使用靜態字段在線程對象之間共享數據成員 – ritesht93

+0

查找解決方案[here](http://stackoverflow.com/questions/15214331/synchronize-write-access-to-volatile-field-cheap-read-寫塊?answertab =票#製表頂部)。 – Braj

回答

0

@pokeairguy歡迎:) ..

揮發性的方式告訴JVM的方式,字段值不能被緩存..每當發生寫入地方引用它必須被更新因此=揮發性

和你的代碼所做的每個對象不同的揮發性成員即他們對每個對象所以沒有共享不同..

這就是爲什麼使用靜態是一路之隔線程對象

共享數據成員