Javaベースのロック

Java対応の目的をロック 

    目的:コードブロックプラスロック片は、アトミック性を保証するように、互いに干渉し、原因コードのデータ異常片にマルチスレッド実行を防止するために

 

第二に、使用同期   (Java言語組み込みのロック)

    オブジェクトロック用いて被験体に単独で2.11、
オブジェクトobject_lock =新しいオブジェクト();

ます。public void実行()

{

     //コードブロックをアトミック性を保証するためにロックされ、それは、同じ時間のスレッドで動作させることができる
    同期(object_lock){
       何かを行います;
    }

}

各Javaオブジェクトは、取得した同期ロックモニタに対して上記同時コード再入を監視するためのモニタを有します

    同期2.2のための方法、

パブリッククラススレッド1を実装Runable {

公共同期無効実行()
{
何かを行います
}

}

 

実際にはスレッド1モニタ、オブジェクトのロックを獲得しました。

スレッド同期メソッドは、オブジェクトのロックを獲得した後、各オブジェクトが1つ特定のオブジェクトに関連付けられている唯一のロックを有し、ロックを通してスレッド達成される
他のオブジェクトをオブジェクトにアクセスするために、他のスレッドができなくなったアクセス同期方法。

 

3つの表示ロックのjava

2.1最初の表示ロックロック

ロック文法レベル、
一般的な方法
//は、ロック取得
のロックを();
//ロック解除
UNLOCKを();
//ロックを取得しようとする
のtryLockを();

ロックがReentrantLockの(ある実現)

パラダイムの使用

//表示ロック
ロックロック=新しいReentrantLockの();
//ロック取得
Lock.lock();
試み{
//操作を実行する

}最後に{
//リリースロックを
lock.unlockは();
}

ロックを取得した後、最終的に解放する必要があり、

ロックとの同期比較

1つの同期コードの単純な
ロックの取得2ロックを中断することができ、あなたはタイムアウトを設定することができ、あなたがロックを取得しようとすることができます

ビジネスシナリオは、2〜3点を満たすためにした場合、それ以外の同期使用し、ロックを使用することを検討してください。

 

2.2 ReadWriteLockインタフェース表示の第2の読み出しと書き込みロックロック種類

ReentrantReadWriteLockとして実装

    コンセプト:同じ時間に複数のスレッドが同時にアクセスできますが、書き込みアクセス時間スレッド、すべてのスレッドがブロックされている
通常のスレッドジオメトリ倍よりも少ない例を読み書きするための理想的なを、増加のパフォーマンス

使用法


//書き込みロックオブジェクト
ReadWriteLock myLock =新しい新しいReentrantReadWriteLock();
//読み込みロック
ロックreadLock = myLock.readLock();
//書き込みロック
、ロックWRITELOCK = myLock.writeLock()

読み取りどこかでその後、複数のスレッドでは、ロックを読んで、あなたがロックを書くことができ、書き込み。

 

待機と通知内部2.3ロック

実装:

ロックロック=新しいReentrantReadWriteLock();
条件kmCondition = lock.newCondition()。

kmCondition.await(); //待つ
kmCondition.signalを(); //予告

 

三つのランク付けの解釈

3.1リエントラントロック

それは、数回にロックを撮影することができます


公共ボイドTESTA同期()
{
System.out.printlnは( "サービスを実行する方法");
TESTB();
}

同期ボイドTESTB公開()
{
System.out.printlnは( "方法Bは、ビジネスを行います");
}

TESTA自体は、ロックしているコールTESTB()、何回も再入可能ロックと呼ばれる、ロックを取得することを2つのロックの合計をロックしています。

 

空LockTestのパブリック(){
//取得したロック
Lock.lock();
試み{
System.out.printlnは( "ロックが取得された最初の時間");
Lock.lock();
試み{
System.out.printlnは(「最初の)二次ロック」を得る;
}最後に{
//リリースロック
lock.unlock();
}
}最後に{
//リリースロック
lock.unlockは();
}
}

上記の例では、ロック2はまた、ロックをロックし、ロックを取得することができるリエントラントであります

このように、同期とロックがすべて再入可能ロックされています

 

3.2公正かつ不公平ロックロック

      フェアロックコンセプト:時間に、最初に取得しなければならない最初のロック要求が満たされると、ロックが(すなわち、第一など、役立っ)不公平ロック、非公正ロックのに対し(ランダムにロック)され
、一般的にロックコンストラクタデフォルトのロック不公平、あなたが公正なロックが必要な場合も指定することができます。

効率の比較
高効率のロック不公平、そしてなぜ?以下の説明を検討

ロック取得する1 A時間スレッド 
ロック要求にも時間2 Bスレッドテイク時間は、ブロックされたオペレーティングシステムによって中断された
サービスを実行時間3 Aスレッドで、ロック解除
時にも3 Cスレッドがロックを要求します

不当ロック機構
    の代わりにCをBにコンピュータをロックするために、この時点で


公正なロック機構
    に代えてAにBのコンピュータをロックするには、この時点で
、しかしBは、この時点で保留され、(このプロセスは長い時間がかかります)正常な状態にサスペンド状態から回復するためにBのスレッドに必要な第1であります

     ビジネスを実行した後、C、Cへの非公正ロック、ロックした後、Bは単に、(この可能性がある)に正常にサスペンド状態から比較的公正ロックを回復することが、きっかけを削減するチャンスがこのスレッドを中断し時間、
私たちは効率性を言うために、より不公平と言います。

もちろん、具体的な例、いくつかの優先度の高い事業、あなたが優先したい、それはまた、どのようなビジネスで公正ロックに応じて使用することができます。

 

おすすめ

転載: www.cnblogs.com/hup666/p/11886158.html