私はWeakReference
が何であるかを知っており、そのドキュメントと多くのブログとSOスレッドを読んでいます。しかし、次の流れが実際に起こるかどうかは、私には依然として不明です。WeakReferenceを通じて弱く到達可能なオブジェクトを取得できるか
- 強い参照
strRef
と弱参照weakRef
strRef
で参照されるオブジェクトX
はweakRef
がランダムスレッド- 前のステップで取得した基準に逆参照されているランダムスレッド上でクリアされています割り当てられている
strRef
GCで弱い参照がどのようにクリアされているかについてのアイデアがありますが、私の知る限りでは、各リファレンスクリア後にGCは発生しません。したがって、ステップ#2〜#3の間にGCが起こらなかった場合、弱く到達可能なオブジェクトが上記のステップ#3によって潜在的に「復活」する可能性があるように見えます。
このような競合状態は非常に不便で危険ですので、それを防ぐ何かがあるはずですが、私はここで完全に確認したいと思います。
弱参照オブジェクトを復活できないようにする仕様がありますか?また、マルチスレッドに関連する警告はありますか?
はい。 'WeakReference'や' SoftReference'を破棄すると、参照された 'Object'のGCが再び強い参照がなくなるまでそのGCが阻止されます。これは、実際には、PhamtomReferenceを参照できない理由です。これは "_race condition_"ではなく、 "_危険"ではありません。この仕組みが理解できない場合は、 "_inconvinient_"にすぎません。**これは** **動作しなければならない方法です。 –
@BoristheSpider、私はそれを競合状態とみなし、私の現在の弱い加入者を持つpub-subに対処するのではなく、一般的ではありません。これにより、加入者は、強い参照がすべてクリアされた後でも、偽の通知をランダムに受信する(一見)ことになります。とにかく、あなたに感謝します。ドキュメンテーションやブログ記事の関連部分へのリンクはありますか? – Vasiliy
私は理解できません、どうして生存性を判断する到達可能性に頼っていますか?どのフレームワークでもpub/subの周りに構築されていることがわかります。アクターは終了時に明示的にシャットダウンする必要があります。これにより、あらゆる種類の奇妙な動作が防止されます。 –