private static Callback callback;
public Foo()
{
super(getCallback());
}
private static Callback getCallback()
{
callback = new Callback();
return callback;
}
コンストラクター Foo() は、複数のスレッドから呼び出される可能性があります。私の懸念は、プライベート静的フィールド「callback」と静的メソッド「getCallback()」にあります。
ご覧のとおり、「getCallback()」が呼び出されるたびに、静的フィールド「callback」に新しい値が割り当てられます。
私の推測では、キーワードstaticは常にインスタンスではなくクラスにアタッチされているため、スレッドセーフではないということです。つまり、Foo の静的フィールド 'callback' は、別の Foo() を構築している他のスレッドによって上書きされる可能性があります。 . これは正しいです?
間違っている場合は修正してください。ありがとう!
編集:私の意図は、「コールバック」をクラスのどこかに保持することです。そのため、後で再利用できます。しかし、これは簡単ではありません。なぜなら、Foo は、「コールバック」の受け渡しを義務付けるコンストラクタを持つクラスから拡張されているからです。