私は次のようなコードがあります。のJava:外部クラスと内部クラス間の同期
class OuterClass
{
private final AtomicInteger count = new AtomicInteger(0);
private class InnerClass extends TimerTask
{
public void run()
{
......
......
incremenetCount();
}
}
public void doSomething()
{
.......
.......
incremenetCount();
}
private void incrementCount()
{
count.incrementAndGet();
}
}
は同期が周りに実際にあるように、外側のクラスの他の関数からそれを呼び出すのと同じ内部クラスからincrementCount
を呼んでいます変数count
?
あなたはこのコードについて何か誤解している可能性があります。ここには同期がありません。 –
さて、私は、コードの減分部分を小屋として置いていませんでした。 2つの可能性があります。InnerClassはTimerTaskを拡張し、複数のInnerClassの実行が同時に存在する可能性があります。また、同じ瞬間に外部クラスによってdoSomethingが呼び出された場合、InnerClassはincrementAndCountを呼び出しています。 – Prasanna
ここでのいくつかのコードは同期されていると思うか、Javaでの "同期"の意味を知らないように思えます。いずれの場合でも、深刻なマルチスレッドコードを書く前に、Javaの並行性を読み出す必要があります。 –