いくつかの中間データ構造内の複数のスレッドからのすべてのSQLアクションをキューに入れてから、単一のスレッドからデータベースに入れることをお勧めします。 ConcurrentHashMap
のようなスレッドセーフな中間構造を持つことが可能です。 、ConcurrentLinkedQueue
または、操作時に同期するだけでもかまいません。
これにより、事前にトランザクションを開始する必要がなくなります。保留中のデータは安全性が低い可能性がありますが、トランザクションがまだコミットされていない間は、データベース内でそれほど安全ではないと思います。
もちろん、これはselect
がない場合にのみ機能します 同じトランザクションからコミットされていないトランザクションデータを選択するステートメント。このようなクエリを何らかの方法で取り除くには、再設計が必要になる場合があります。
CountDownLatch
を使用します すべてのデータの準備が整い、データベース書き込みスレッドがアクションを開始する必要があることを検出します。発生しない場合は、データベース書き込みスレッドにreactorパターンを使用してください。