与えられた:
public class TestSeven extends Thread {
private static int x;
public synchronized void doThings() {
int current = x;
current++;
x = current;
}
public void run() {
doThings();
}
}
正しい説明はどれですか?
A.コンパイルは失敗します。
B.実行時に例外がスローされます。
C. run()メソッドを同期すると、クラスはスレッドセーフになります。
D.変数「x」のデータは同時アクセスの問題から保護されています。
E. doThings()メソッドを静的として宣言すると、クラスはスレッドセーフになります。
F.synchronized(new Object()){}ブロックのdoThings()内のステートメントをラップすると、クラスはスレッドセーフになります。
そのクラスをスレッドセーフにするために、doThings()を同期済みとしてマークするだけでは不十分ですか?正解はDですが、この質問のモデルの答えはEですが、理由がわかりません。