Java並行プログラミングにおける明示的ロックの詳細な説明
明示的なロック
1. ロックと ReentrantLock
ロックは、無条件、ポーリング可能、時間指定された割り込み可能なロック取得操作を提供します。すべてのロックおよびロック解除メソッドは明示的です
ReentrantLock は Lock: を実装し、同期されたものと同じメモリ セマンティクスを提供します。 再入可能ロックセマンティクスを提供します
1. 基本セマンティクス:
void LockDefinition() { Lock lock = new ReentrantLock();try {//do someting//更新对象状态,捕获异常;并在必要时恢复不变性条件} finally {//finally中释放锁 lock.unlock(); } }
2. ポーリングロックと時限ロック
lock.tryLock([Long, TimeUnit]): ロックの取得を試みます。時限ロック
3. 割り込み可能なロック取得操作
lock.lockInterruptibly();
2. 公平性
ReentrantLock は公平なロック(要求された順序で取得されるロック)と不公平なロック(キュー挿入可能)を作成できます。
キュージャンプ: スレッドが不当なロックをリクエストしたとき、リクエストが行われたときにロックステータスが利用可能であれば、このスレッドはキューに入れられませんが、キュー内の待機中のスレッドをすべてスキップしてロックを取得します。
注: 不公平なロックはキュージャンプを推奨しませんが、キュージャンプを防ぐことはできません; 一方、公平なロックはキューに配置され、順番に実行されます
競争が激しい場合、不公平なロックは公正なロックよりも高速です: 理由は再開するためです。キュー内のスレッド スレッドの実行開始の間に重大な遅延があります
3. 読み取り/書き込みロック
ReentrantLock は標準のミューテックス ロックですが、次のような一部のシナリオでは、読み取りと読み取りは並行して実行できますが、並行して実行することはできません。
ReadWriteLock 読み取り/書き込みロック: 実装 ReentrantReadWriteLock: メソッド readLock および writeLock
1. インタラクションおよび実装メソッド
解放優先度: 書き込みロックが解放され、キューに読み取りと書き込みの両方がある場合、それともリクエストを行ったスレッドが優先されますか?
読み取りスレッドがキューにジャンプする: 現在の読み取りロックを待機している書き込みロックがあるため、後続の読み取りロックはキューにジャンプして直接読み取る必要がありますか?直接読み取りは同時実行性を向上させますが、書き込み不足や取得の失敗を引き起こす可能性があります
再入可能性: 読み取りロックと書き込みロックは再入可能ですか?
降格: 書き込みロック、スレッドのロックをダウングレードできるように、ロックを解放せずに読み取りロックを取得できますか?
アップグレード: 待機中の他のスレッドよりも前に、読み取りロックを書き込みロックにアップグレードできますか? 2 つのスレッドが同時に書き込みロックにアップグレードしようとすると、簡単にデッドロックが発生します
主に読み取り操作であるデータ構造に適用されます
以上がJava並行プログラミングにおける明示的ロックの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Python は、問題解決の初心者に力を与えます。ユーザーフレンドリーな構文、広範なライブラリ、変数、条件文、ループによる効率的なコード開発などの機能を備えています。データの管理からプログラム フローの制御、反復的なタスクの実行まで、Python が提供します

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Python は、学習の容易さと強力な機能により、初心者にとって理想的なプログラミング入門言語です。その基本は次のとおりです。 変数: データ (数値、文字列、リストなど) を保存するために使用されます。データ型: 変数内のデータの型 (整数、浮動小数点など) を定義します。演算子: 数学的な演算と比較に使用されます。制御フロー: コード実行のフロー (条件文、ループ) を制御します。

C は初心者がプログラミングを学ぶのに理想的な言語であり、効率性、汎用性、移植性などの利点があります。 C 言語の学習には次のことが必要です。 C コンパイラ (MinGW や Cygwin など) をインストールする 変数、データ型、条件文、ループ文を理解する main 関数と printf() 関数を含む最初のプログラムを作成する 実際のケースによる練習 (平均値の計算など) C言語の知識

C は、初心者がシステム プログラミングを学習するのに最適な選択肢です。ヘッダー ファイル、関数、メイン関数のコンポーネントが含まれています。 「HelloWorld」を印刷できる単純な C プログラムには、標準入出力関数宣言を含むヘッダー ファイルが必要で、main 関数で printf 関数を使用して印刷します。 C プログラムは、GCC コンパイラーを使用してコンパイルして実行できます。基本をマスターしたら、データ型、関数、配列、ファイル処理などのトピックに進み、熟練した C プログラマーになることができます。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Python プログラミング入門 Python のインストール: 公式 Web サイトからダウンロードしてインストールします。 HelloWorld!: print("HelloWorld!") を使用して、コードの最初の行を出力します。実際のケース: 円の面積を計算する: π (3.14159) と半径を使用して円の面積を計算します。変数とデータ型: Python のデータ型には、整数、浮動小数点数、文字列、ブール値が含まれます。式と代入: 演算子を使用して変数、定数、関数を接続し、代入演算子 (=) を使用して変数に値を代入します。制御フロー: if-else ステートメント: 条件に基づいて異なるコード ブロックを実行し、奇数を判断します。

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。
