JAVAの高度な学習(2)------セキュリティ問題の解決

スレッドデッドロックの問題:例外もエラーもスローされません。
異なるスレッドが相手に必要な同期リソースを占有し、相手が必要な同期リソースを放棄するのを待っているため、スレッドデッドロックが発生します。
解決策:特別なアルゴリズムの原則;同期リソースの定義を最小限に抑える;ネストされた同期を回避するようにする;

JAVAでは、同期メカニズムを使用してスレッドセーフの問題を解決します。
**インタビューの質問、スレッドセーフの問題を解決する方法:** 1.メソッド1とメソッド2を合わせて同期メソッドと呼び、メソッド3をロックメソッドと呼びます。2。メソッド1はコードブロックを同期し、メソッド2はメソッド、メソッドを同期します。 3ロック同期ロック方法。

方法1:同期されたコードブロック
同期(同期モニター){ //同期 が必要なコード(共有データを操作するコード)}共有データ:(共有データのみにスレッドセーフの問題があります)Ticketなどの複数のスレッドによって操作される変数。同期モニター=ロック:クラスの任意のオブジェクトがロックとして機能できます。要件:複数のスレッドが同じロックを共有する必要があります。自然な方法:オブジェクトを見つける比較的簡単な方法:同期(これ)これはwを意味します。次の図は2つの間違った書き込み方法を示しています。緑色のコメントは正しい書き込み方法です。staticを使用すると、継承方法のスレッドセーフの問題を解決できます。;同期(window2 .class)クラスもオブジェクトであり、クラスは1回だけロードできます







ここに画像の説明を挿入します

ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します

方法2:同期メソッド
共有データを操作するためのコードがメソッドで完全に宣言されている場合は、このメソッドを同期として宣言することもできます。

1ナチュラルメソッド
ここに画像の説明を挿入します
showメソッド同期モニターは次のとおりです。

2スレッドクラスを継承するスレッドセーフの問題
ここに画像の説明を挿入します
静的メソッドは静的メソッドとのみ呼ぶことができます:

ここに画像の説明を挿入します同期はスレッドセーフの問題を解決できます;実行時の複雑さが増します。
それはマルチスレッド並列操作であることが判明し、その後シングルスレッドになりました同期。安全のための効率
方法3ロック(同期ロック)
ctrl + pコンストラクター1.ReentrantLockを
インスタンス化します
2.コードをtry { lock.lock //ロックのメソッドを呼び出します} finally { lock.unlock(); //ロック解除メソッドを呼び出します}インタビューの質問:同期とロックの類似点と相違点は?同じ:どちらもスレッドセーフの問題を解決できます。異なる:Synchronizedは、対応する同期コードブロックを実行した後、同期モニターを自動的に解放します。ロックは手動で同期を開始する必要があり、同期の終了も手動で実装する必要があります。







おすすめ

転載: blog.csdn.net/HenryFanQAQ/article/details/110454256