この記事では、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. 軽量ロック
アクセス同期コード ブロック, まず、現在のスレッドのスレッドスタックにロックレコード(Lock Record)領域を作成します。
|
以上がJava での synchronized キーワードの使用法の概要 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。