我想知道JAVA中synchronized和final之間的關係。我已經閱讀了幾篇文章,每個人都提到應該使用final字段在econstructore中初始化一個對象,否則未初始化的對象可能會在使用同一對象的多個線程之間導致同步問題。對於。例如以下代碼:JAVA中Synchronized和Final之間的關係
class FinalFieldExample {
final int x;
int y;
static FinalFieldExample f;
public FinalFieldExample() {
x = 3;
y = 4;
}
static void writer() {
f = new FinalFieldExample();
}
static void reader() {
if (f != null) {
int i = f.x;
int j = f.y;
}
}
}
讀者可能會正確讀取x的值,但可能會將y的值讀爲0,因爲它是nt聲明的最終值。
任何人都可以幫我解釋爲什麼會發生這種情況..?
謝謝。
爲什麼你認爲「讀者可能會正確讀取x的值,但可能會讀取y的值爲0,因爲它被宣佈爲final。」? – zch 2013-02-24 00:18:38
向我們展示您的所有代碼,特別是'main()'方法,它顯示您聲明的行爲,從而創建一個[SSCCE](http://sscce.org) – Bohemian 2013-02-24 00:19:14
@Bohemian 2個線程,一個調用writer和一個調用讀者。 – assylias 2013-02-24 00:22:39