Javaの「ベストプラクティス」に関する簡単な質問。データベースのプライマリデータ構造をマップとして持つデータベースオブジェクトがあるとします。さらに、マップの取得/設定情報を同期させたいとします。マップにアクセス/変更するすべてのメソッドを同期させる方が良いですか、変更/アクセスするたびにマップの周りに同期ブロックを作成したいですか?データベースとの同期
0
A
答えて
2
アトミックでなければならない作業単位の範囲によって異なります。単一の状態変更を表す複数の操作を実行するプロセスがある場合、そのプロセス全体をMapオブジェクトで同期させたいとします。個々の操作を同期させる場合、複数のスレッドが読み取りと書き込みの際に相互にインターリーブすることができます。これは、読み取りコミットされていないモードでデータベースカーソルを使用するようなものです。不完全/間違ったデータ状態を見て、他のいくつかのスレッドの半分の作業に基づいて決定を下すかもしれません。
(そしてもちろん、代わりにsynchronizedキーワードのjava.util.concurrent.locks
からクラスを使用する義務の提案を挿入:))
1
一般的には、private synchronized
の方法よりもプライベート以外の方法では、private final Object
で同期することをお勧めします。これの根拠は、ルージュの呼び出し元がメソッドに入力を渡してロックを取得したくないということです。 private
メソッドでは、メソッドの呼び出し方法を完全に制御できます。
個人的には、私はメソッドを避け、ブロックをsynchronized()
ブロックにカプセル化します。これにより、より厳密な制御が可能になり、外部の情報源が自分のモニターを盗むのを防ぐことができます。私はあなたのモニターへの外部ソースアクセスを提供したい場合を考えることはできませんが、そうした場合は、ロックオブジェクトに同じものを渡すことができます。しかし、私が言ったように、私はそれを避けるだろう。
関連する問題
- 1. Google Contactsデータベースとの同期
- 2. masterデータベースとの同期
- 3. データベースとドメイン層の同期
- 4. リモートデータベースとipadの同期データベース
- 5. データベースの同期
- 6. Androidデータベースとサーバーデータベースを同期
- 7. データベースとデータビューを同期
- 8. 同期対非同期データベースへのアクセス
- 9. 同期データベースは
- 10. データベース同期
- 11. データベースの同期とWebサービスの選択
- 12. アスタリスク1.8データベースとDigium GUIの同期化
- 13. (部分)mysqlとのデータベース同期
- 14. テストエンジンとライブExpressionEngineデータベースの同期
- 15. PostgresとMongodbの双方向データベース同期
- 16. JavaのJPA - 同期データベースとエンティティ
- 17. PowershellとAzure SQLデータベースの同期
- 18. データベース同期オンライン/オフライン
- 19. PostgreSQL用のデータベース同期ツール
- 20. appengineでデータベースの同期
- 21. データベース同期アルゴリズムのアドバイス
- 22. sqliteデータベースの同期/更新
- 23. HTML5アプリケーションのデータベース同期
- 24. データベース同期のWebサービスオーケストレーション
- 25. MySQLデータベースの同期オプション
- 26. データベースの非同期アクセス
- 27. AWSでms SQLデータベースと同期
- 28. SQLとSQliteデータベースを同期する
- 29. Googleスプレッドシートとデータベースを同期させる
- 30. データベースをコードと同期させる
あなたは概念的な意味でデータベースを意味しますか?またはSQLデータベースのようなデータベースですか? – corsiKa
概念的な意味、私はそれを明確にすべきだった... – Sal
実際には、これに対する答えは私の質問の後者の提案だと思う。理論的には、いくつかのメソッドが同期されていても、異なるメソッドが同時に起動され、マップが変更される可能性があります。 – Sal