問題タブ [atomicreference]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 変更可能なアトミック参照は悪い考えですか?
ときどき変更したいデータ構造があり、ときどき完全に置き換えたいことがあります。現時点では、これを AtomicReference に保存し、変更する必要がある場合は、置き換えるのではなく、同期ブロック (保存された値ではなく、AtomicReference 自体で同期) を使用しています。
次のようなものです:
変更呼び出しは、アトミック参照ではなく、ラップされた値のメンバーであり、独自のスレッド セーフが保証されていないことに注意してください。
これは安全ですか?Findbugs (フリーウェアのコード レビュー ツール) はそれについてこう言っていました。特に不変のものとして AtomicReference を参照しているドキュメントも見ました。
これは安全ですか?そうでない場合は、動作についてより確実な独自の参照格納クラスを作成できますが、結論に飛びつきたくありません。
android - ヘルパー ファイルのインテントとアクティビティ ナビゲーションの AtomicReferences
私のアプリでは、約 5 つの異なる画面間を移動し、それぞれが独自のactivity
. ほとんどすべてactivity
の を他の から呼び出すことができるので、冗長なコードを持たないようにactivity
を管理するヘルパー ファイルを作成しようとしています。intents
メソッドを含むヘルパー ファイルを作成し、これらのメソッドを呼び出すときにpublic static
アクティビティcontext
と必要なデータを渡します。これは私のデバイス (Samsung Galaxy S5) で正常に動作しているように見えますが、Android Studio では、ヘルパー ファイルでインテントを AtomicReference にすることをお勧めします。
これらが必要かどうか、またその理由を理解するのを手伝ってもらえますAtomicReference<Intent>
か?
context
また、これらの呼び出しを行うためにヘルパー ファイルに渡すことは適切ですか?
アクティビティヘルパー ファイル:
AppCompatActivity のメニューからヘルパー ファイルを呼び出す例:
java - AtomicReference を使用した引数を持つシングルトン
入力引数を取るシングルトンを作成する必要があります。基本的に、いくつかの構成に基づいてライブラリに DBConnector を作成する必要があります。これで、この構成は、消費するアプリによってライブラリに渡されます。渡された構成に基づいて、ライブラリで再利用される DBConnector のインスタンスを作成したいと考えています。これを処理するために DI を使用することを考えましたが、このライブラリが初期化されると、DB 接続が実際に必要かどうかわかりません。必要でない場合は、この DBConnector を作成したくありません。ライブラリが初期化されると、getResponse(RequestType rt) の呼び出しで、(RequestType に基づいて) DBConnector が必要かどうかがわかり、そのときにインスタンスを作成する必要があります。したがって、以下のコードはマルチスレッド環境に適していますか?
}
EDIT マルチスレッドテストを書き、すべてのスレッドが同じインスタンスを取得しています。ただし、Java メモリ モデルが原因でエッジ ケースを見逃さないようにしたいだけです。
java - シングルトン パターンに AtomicReference を使用する必要がありますか?
私はAtomicReferenceクラスに出くわし、これが変更可能でテスト用に置き換えることができるシングルトンを作成する良い方法になるかどうか疑問に思っていました。
二重ロックのチェックに問題があることはわかっているので、そのルートには行きたくありませんでした。 JDK 1.5 の時点で修正されました ( https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html )。
また、シングルトンを初期化するのではなく、遅延してインスタンス化することをお勧めします。たとえば、テスト中はデフォルトのクラスを使用したくありませんSimpleExample
が、場合によっては、作成にコストがかかるか、特定の環境で問題が発生します。依頼前に交換していただけると助かります。
ここに私の質問があります:
- 大きなパフォーマンス ヒットはありますか?
- シングルトンとして使用することに気付いていない問題はありますか?
- 合理的な代替手段は何ですか?