この D クラスのスレッドが正しいかどうかはわかりません。i
アクセス時に同期ブロックにあるはずの競合状態はありますか? D が外部クラスで、A インスタンスが D コンストラクターに渡された場合はどうなるでしょうか。
class A
{
int i;
void f() {
i++;
D d = new D();
d.start();
}
class D extends Thread {
public void run() {
int g = i;
}
}
}