Java での synchronized キーワードの使用法の概要 (コード例)
この記事では、Java での synchronized キーワードの使用法 (コード例) を紹介します。参考にしていただければ幸いです。それはあなたの役に立つでしょう。
同時プログラミングでは、synchronized キーワードは一般的な役割です。以前は synchronized キーワードを重みロックと呼んでいましたが、JDK1.6 では synchronized が最適化され、バイアス ロックと軽量ロックが導入されました。この記事では、synchronized キーワードの使用方法、バイアス ロック、軽量ロック、重いロックの違いと実装原則を紹介します。
まず、synchronized キーワードの 4 つの使用法を見てみましょう。
1. 通常のメソッドを変更します
private synchronized void synMethod(){ }
この使用法では、オブジェクト同期ロックのインスタンス。
2. 静的メソッド
private static synchronized void synMethod(){ }
synchronized を変更します。現在のクラスオブジェクトです。
3. 同期メソッド ブロック
private void synMethod1(){ synchronized(this){ } } private void synMethod2(){ synchronized(ThreadTest.class){ } }
synMethod2 のオブジェクト インスタンスをロックします。現在のクラスオブジェクト。
ロック原則を再度紹介します
ロック原則を紹介する前に、まず Java オブジェクト ヘッダー Mark Word について理解しましょう。32-例として少し。
##ロック ステータス |
25 ビット |
4ビット |
1ビット |
2ビット |
||
#23 ビット |
##2bit
| ##ロックが偏っているかどうか
| ロックフラグ||||
| スタック内のロック レコードへのポインタ||||||
#ミューテックス (ヘビーウェイト ロック) へのポインタ |
#10
|
|||||
#GC マーク | 空||||||
| スレッドID##エポック |
オブジェクト生成年齢 |
#1 |
#01
|
||
ロックなし
|
オブジェクトのハッシュコード #オブジェクト生成年齢 |
0 |
01 |
上の表は、オブジェクトが各ロック状態にあるときにオブジェクト ヘッダーに格納される情報を示しています。 1. バイアスされたロック #実際の環境では、スレッドが同期ブロックにアクセスするときに、他のスレッドがロックを競合しない場合同じスレッドが複数回ロックを取得します。つまり、単一のスレッドが同期コードを実行します。この場合、スレッドが毎回ブロックされると、CPU パフォーマンスが無駄になります。この場合、バイアスされたロックの概念が導入されます。
2. 軽量ロック
|
以上がJava での synchronized キーワードの使用法の概要 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









1. 基本機能 1. 楽観的ロックで開始し、ロック競合が多発する場合は悲観的ロックに変換する 2. 軽量なロック実装で開始し、長時間ロックを保持するとロックを解除する3. 軽量ロックを実装するときに最もよく使用されるスピン ロック戦略 4. 不公平なロックである 5. リエントラント ロックである 6. 読み取り/書き込みロックではない 2. JVMロック プロセスを同期します。 ロックは、ロックなし、バイアスされたロック、軽量ロック、および重量ロックの状態に分類されます。状況に応じて順次バージョンアップしていきます。偏ったロックは男主人公を鍵、女主人公をスレとするもので、このスレッドだけがこのロックを使用すれば、たとえ結婚証明書を取得しなくても男主人公と女主人公は永遠に幸せに暮らせる(高額回避) -コストオペレーション)しかし、女性のサポート役が登場します

1. Java におけるロックの概念 Spin ロック: スレッドがロックを取得するとき、そのロックが別のスレッドによって取得されている場合、スレッドはループで待機し、ロックが正常に取得できるかどうかを判断し続けます。ロックが取得されると、ロックはループを終了します。楽観的ロック: 競合がないことを前提として、データを変更する際に以前に取得したデータと不整合が見つかった場合、最新のデータを読み込み、変更を再試行します。悲観的ロック: 同時実行性の競合が発生することを想定し、すべてのデータ関連操作を同期し、データが読み取られた時点からロックを開始します。排他的ロック (書き込み): リソースに書き込みロックを追加します。スレッドはリソースを変更できますが、他のスレッドはリソースを再度ロックすることはできません (単一書き込み)。共有ロック (読み取り): リソースに読み取りロックを追加した後、読み取りのみ可能ですが変更はできません。他のスレッドは読み取りロックのみを追加でき、書き込みロック (複数) を追加できません。 S として参照

Java 1 での synchronized の使い方のまとめ。関数修飾子として synchronized を使用した場合のサンプルコードは次のようになります: Publicsynchronizedvoidmethod(){//….} これが同期メソッドですが、このときどのオブジェクトが同期ロックされているのでしょうか?彼がロックするのは、この同期されたメソッド オブジェクトを呼び出すことです。言い換えれば、オブジェクト P1 がこの同期メソッドを異なるスレッドで実行すると、同期効果を達成するために相互排他が形成されます。ただし、このオブジェクトが属するクラスが生成する別のオブジェクトP2は、synchronizedキーワードを付加してこのメソッドを任意に呼び出すことができる。上記のサンプルコードなど。

1. 同期は最も一般的に使用される同期方法であり、これには主に 3 つの使用方法があることを説明します。 2. 例//一般的なクラス メソッドの同期 synchronizedpublidvoidinvoke(){}//クラスの静的メソッドの同期 synchronizedpublicstaticvoidinvoke(){}//コード ブロックの同期 synchronized(object){}これら 3 つのメソッドの違いは、同期されるオブジェクトが異なることです。通常のクラスはオブジェクト自体を同期し、静的メソッドはクラス自体を同期し、コード ブロックは括弧内のオブジェクトを同期します。 Javaにはどのようなコレクションがありますか?

ツールの準備 同期の原理について正式に説明する前に、まずスピン ロックについて話しましょう。スピン ロックは同期の最適化に大きな役割を果たすためです。スピン ロックを理解するには、まずアトミック性とは何かを理解する必要があります。いわゆるアトミック性とは、単に各操作が行われないか完了することを意味します。すべてを行うということは、操作中に中断できないことを意味します。たとえば、変数データに 1 を追加するには、次の 3 つのステップがあります: メモリからレジスタにロードする。データの値に 1 を加算します。結果をメモリに書き込みます。原子性とは、スレッドがインクリメント操作を実行しているときに、他のスレッドによって中断できないことを意味し、このスレッドがこれら 3 つのプロセスを完了した場合にのみ実行されます。

概要: synchronized キーワードは、1 つのスレッドのみが同期されたコード ブロックにアクセスできるようにするために Java で提供されています。 synchronized キーワードが提供されているのに、なぜ Lock インターフェースも Java SDK パッケージで提供されるのですか?これは不必要な車輪の再発明でしょうか?今日はこの問題について一緒に話し合います。 Java では synchronized キーワードが提供され、1 つのスレッドのみが同期されたコード ブロックにアクセスできるようにします。 synchronized キーワードが提供されているのに、なぜ Lock インターフェースも Java SDK パッケージで提供されるのですか?これは不必要な車輪の再発明でしょうか?今日は一緒にそれについて話し合いましょう

Synchronized とは何ですか? Java 読者は synchronized キーワードに馴染みがありません。これはさまざまなミドルウェア ソース コードや JDK ソース コードで見ることができます。synchronized に詳しくない読者にとっては、synchronized キーワードは複数の言語で使用する必要があることだけを知っています。 -threading.synchronized によりスレッドの安全性を確保できます。これは、ミューテックス ロック (同時に 1 つのスレッドだけが実行でき、他のスレッドは待機します)、または悲観的ロック (同時に 1 つのスレッドだけが実行でき、他のスレッドは待機します) と呼ばれます。JVM 仮想マシンは、開発者は synchronized キーワードを使用するだけで済みます。使用する場合は、ロックのミューテックスとしてオブジェクトを使用する必要があります

Java には、可視性を超えた機能を提供する他の修飾子がいくつか用意されています。これらの修飾子は非アクセス修飾子と呼ばれ、静的として宣言された静的メンバーはクラスのすべてのインスタンスに共通です。静的メンバーは、クラス メモリに格納されるクラス レベルのメンバーです。 Final この修飾子は、変数、メソッド、またはクラスへのさらなる変更を制限するために使用されます。 Final として宣言された変数の値は、その値を取得した後は変更できません。 Final メソッドをサブクラスでオーバーライドしたり、Final クラスのサブクラスを作成したりすることはできません。 Abstract この修飾子はクラスまたはメソッドで使用できます。この修飾子を変数やコンストラクターに適用することはできません。抽象として宣言されたメソッドはサブクラスで変更する必要があります。抽象宣言されたクラスをインスタンス化することはできません。同期 この修飾子は、複数のスレッドを制御するために使用されます。
