マルチスレッドの---スレッド同期

スレッド同期

メカニズム、揮発性、同期、最終的な静的:スレッド間の連携の共有データにアクセスするためのキーワードJavaプラットフォームロック; API:はObject.wait()/ Object.ntify()

ロック

また、ミューテックスのロック/排他ロックが元の並列スレッドは、シリアルアクセスに共有変数をアクセス制御することであるとしても知られている、それぞれのスレッドがロックを保持する変数にアクセスする必要があり、ロックは、ライセンス保持できるように見ることができますアクセス、操作を完了するための論理スレッド(それがクリティカルセクションになった後にロックコードの実行を取得するために)次のスレッドを保持するために、ロックを解除します。

ロックによって引き起こされる問題

  • コスト:コンテキストスイッチ

  • リークロック:プログラムエラーは、ロックがスレッド、再利用によって占有されているので、他のスレッドが保持することはできません

  • デッドロック

ロック役割

唯一のロックを保持しているスレッドを読み取る必要がある場合でも、セキュリティスレッド、すなわちアトミック/表示/秩序が、すべてが同じスレッドロックを使用するコードの同じクリティカルセクションにアクセスすることを確保する必要性を確保するための共有変数を保護するために、

  • 不可分性

    相互排他ロックで一つだけのスレッドが、他のスレッドが気にすることはできません実行することができ、原子性を確保するために、このスレッドが予期せず(不随意スイッチ)終了した場合、そのスレッドだけがそれを行うには、原子性を保証することができます

  • 可視

    ライタースレッドが共有変数は、スレッド実行プロセッサ(新しい結果を取得するには、このスレッドを確保)をキャッシュするために同期しない更新ロックを取得します場合は、ロックが解除されると、共有変数の書き込みスレッドを更新させることができ、アトミック性の保証は、共有変数を読み取るためにロックを保持可視スレッドを提供する(参照タイプ共有変数/配列;(新しい結果を読み取る)リードスレッド同期するように、プロセッサ・キャッシュによって実行スレッドにプッシュ各変数要素の結果は)最新の結果であり、

  • 整頓

    セキュリティのアトミック性と可視性の結果そのため、知覚とソースコードの同じスレッドの書き込み動作シーケンスのスレッドを読んで、それはアトミック、これは他に並べ替えされることはありませんので、それが並べ替えされないメモリ操作の重要なエリアを保証することはできませんスレッドへの影響

再入

ロックを保持しているスレッドは、ロックがShihaiをリリースしていない場合は、再び成功したロックホールドに適用される(TODOを達成するためにどのように)

明示的なロックと内部ロック

  • 内部ロック

    synchronizedキーワードによって実装、また、モニタ、非公正ロックとして知られています

    • synchronizedキーワードは、それは通常、ハンドルロックprivate final異なるロック、競合状態の複数のスレッドで、その結果、変更され、そのタグ値を防止するように改変し、

      Java仮想マシンは、アプリケーションの代わりに実行して、内部のロックを解除し、プログラムは、特別な処理をしたキャッチされない例外をスローしたので、状況はロックが漏れロックの問題を回避するためには表示されませんリリースされていませんします

      内部ロック・スケジューリングおよび関連するJava仮想マシンが、それはロックが占有されている各内部ロックするためのロックを取得するために待機中の対応するスレッドを格納するためのエントリのセットが割り当てられ、このセット(アプリケーションロック失敗)内のスレッドであります一時停止の状態がブロックされ、ロックが解除されたときに再適用ロックする機会を待って、このコレクション内のスレッドが起こされるだろう、とロックをつかむために、新しく作成されたスレッドが一緒に解放されます

      こうした偏ったロックを粗く排除ロックをロックし、適応性をロックし、明示的なロックの間のスケーラビリティのTODOの違いを減らすなどJDK1.6 / 1.7いくつかの最適化、

  • 明示的なロック

    フェアロックはまた、非アームロック(デフォルト)をサポートすることができますいずれかのために、juclパッケージの下のロックインタフェースの実装クラスによって実装

    直接falseを返すには適用されない場合は、アプリケーションをサポートするためのtryLockの方法は、短い時間をロック

  • 読み書きロック

    共有/排他ロックは、ロックはロックの他の種類の役割を果たしています。対応するライトロックは、複数のスレッドが同時に読み取り、共有変数を読み取ることができ、任意のスレッドによって保持されず、ロックを書き込む:ロック読み取りロックし、対応する書き込みロックを読み取るする共有への排他的アクセスと、他のスレッドによって保持されていません変数

    読み取り専用操作に適し頻繁に書くよりも、長く保持されているロックを読みます

メモリバリア

メモリバリアは、秩序を確実にするために、並べ替え、コンパイラ/プロセッサを禁止しますが、2つのアクションが実行するために一緒にあります。最新の情報に更新プロセッサキャッシュとプロセッサのキャッシュフラッシュ、2つの動きは保証可視性の基本です。

需要や発注要件のない可視性がない場合に、実行する方法?

おすすめ

転載: www.cnblogs.com/hangzhi/p/11279532.html