検索
ホームページJava複数のスレッドを介して同じ/同様のデータベース操作を同時に実行する解決策はありますか?

php エディター Zimo が提供する Java Q&A: 複数のスレッドが同じ/類似のデータベース操作を同時に実行できるようにするソリューションはありますか?開発プロセスでは、データベースを同時に実行する複数のスレッドを効果的に処理する方法が常に大きな注目を集めてきました。この記事では、開発者がこの問題を解決できるように、データベース接続プール、ロック メカニズム、トランザクション処理、その他の方法の使用を含むいくつかの解決策を紹介します。システムのパフォーマンスと安定性を向上させるために、マルチスレッドの同時データベース操作を実装する方法を見てみましょう。

質問内容

Java、Spring Boot、Hibernate を使用して、デッドロックや古いデータ例外を発生させることなく、複数のスレッドが特定の操作を同時に実行できるようにする方法はありますか。

たとえば、自動ツールが同時に 2 回ログインすると、次のいずれかの状況が発生するとします。

    2 つのスレッド (リクエスト) が同時にユーザー レコードを更新するため、デッドロックが発生します (例: ユーザーの最終ログイン日時の保存など)。
  1. あるスレッドが別のスレッドのトランザクションが完了する前にユーザーを更新したため、古いデータの例外が発生しました。
これは、ユーザー ID に同期を追加することで解決できますが、そのようなことは

どこでも 行う必要があり、その結果、パフォーマンスが低下する可能性があり、コードベースがさらに肥大化し、注意を維持することが困難になります。

あるいは、分離レベルを調整することもできます (デフォルト レベルをグローバルに設定できるかもしれません)。これはより良い解決策でしょうか、それとも他の解決策はありますか?

解決策

悲観的ロック。

トランザクションの早い段階で更新が必要な可能性のあるすべての行をロックします。これは、

locking read を使用して行うことができます。 リーリー

1 つのスレッドのみがそれを取得します。他のスレッドは、このスレッドがロックを解放するまで待機します。

その間、ロックを保持しているスレッドは、準備ができたら行を更新できます。

リーリー

それでは、他のスレッドに対して礼儀正しく、

更新後できるだけ早く送信してください。これにより、自動的にロックが解除されます。 リーリー

これにより、キューに入れられた次のスレッドが待機しているロックを取得できるようになります。

ロック読み取りを使用すると、複数の行 (複数のテーブル内の複数の行も含む) をロックできます。

select クエリによってチェックされた行はすべてロックされます。複数のテーブルの行をロックする必要がある場合は、結合などの操作を実行できます。

ロックの取得はアトミックであるため、指定されたロック ステートメントは

すべての 要求されたロックを取得する必要があり、そうでない場合は待機する必要があります。

以上が複数のスレッドを介して同じ/同様のデータベース操作を同時に実行する解決策はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はstackoverflowで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター