比方說,我有以下類將被重讀,但只是偶爾寫入。它會在一個多線程的web應用程序中使用,所以它需要是線程安全的:同步寫入訪問易失性字段(便宜的讀寫塊)
public class Foo {
private volatile String foo;
public String getFoo() {
return foo;
}
public synchronized String setFoo(String in) {
this.foo = in;
}
}
Java併發(http://www.ibm.com/developerworks/java/library/j-jtp06197/index.html)指出,這是爲了保護寫訪問,同時提高讀訪問一個脆弱的方式。什麼是這種模式更強大的替代方案?或者如果foo需要在讀取繁重的環境中可變,那麼還有其他選擇嗎?謝謝。
將變量標記爲易失性不會使其線程安全。如果所有的OP都在讀/寫,那麼實際上它是線程安全的(如果多個線程正在遞增備份變量,則這不會成立)。 – 2013-03-05 01:48:06
那麼在volatile和synchronized都適合的情況下會出現什麼情況? – oberger 2013-03-05 04:26:43
我相信沒有這種情況。如果您將訪問權限同步到一個字段,那麼volatile是多餘的。 – 2013-03-05 04:32:19