Java synchronizedキーワードの同期を簡単に理解します。
1255 ワード
synchronized
synchronizedは、同期ブロック、同期方法として使用することができる。同期ブロックは、オブジェクトのロックをより正確に制御し、ロックの作用領域を制御するために使用することができる(ロックの作用域はロックからロックの解除までの時間であり、どのオブジェクトを取得するかを選択することができます。ただし、同期ブロック機構を使用する場合、ロックの使用が多すぎると、デッドロック問題が発生し、同時に取得とリリースにも代償があります。
同期方法としては、このクラスのオブジェクトを持っています。言い換えれば、thisオブジェクトであり、ロックの役割領域は全体的な方法であり、ロックの役割領域が大きすぎて、デッドロック問題を引き起こす可能性があります。同期が不要なコードブロックを含めて、プログラムの動作効率を低下させることもあります。
同期方法であれ、同期ブロックであれ、無限ループを中に含めるべきではない。そうでないと、ロックを獲得した後、無限ループが続き、獲得したロックリソースを解放できなくなり、ロックを待つスレッドが獲得できなくなり、デッドロック問題が発生する。
同期方法
非静的同期方法
すべての非静的同期方法は、同じラッチである。すなわち、例示的なオブジェクトの非静的方法がロックされた後、このオブジェクトの他の非静的方法は、この方法がロックを解除してからロックを取得することができるのを待たなければならない。このタイプの他のオブジェクトは取得でき、他のオブジェクトの非静的方法は異なるロックを使用している。
静的同期方法
すべての静的同期法は同じ錠を使用しています。このタイプのオブジェクト自体は異なるオブジェクトを使用しています。したがって、クラスの非静的方法と静的方法の間にはロック競合がありません。しかし、クラスの静的方法の間にはロック競合があり、
同期ブロック
ロックは選択できますので、同じロックの同期ブロックが存在してこそロック競争があります。注意してください。同期ブロックのロックは選択可能であるが、任意に選択できるものではない(参照対象のインスタンス変数を使用するのは良い選択ではない。同期ブロックは実行中に、nullに設定されていて、nullオブジェクトにロックをかけると異常が発生し、異なるオブジェクトにロックをかけることもロックを使用する目的に反するので)
同期は参照に基づくものではなくオブジェクトに基づいています。複数の変数はオブジェクトを参照し、変数は参照の対象を変更することができます。したがって、参照ではなくインスタンスオブジェクトに従って考えます。原則として!可能性のある再同期ブロックの中でその値を変更するインスタンス変数に対して、永遠にロックしないでください。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
synchronizedは、同期ブロック、同期方法として使用することができる。同期ブロックは、オブジェクトのロックをより正確に制御し、ロックの作用領域を制御するために使用することができる(ロックの作用域はロックからロックの解除までの時間であり、どのオブジェクトを取得するかを選択することができます。ただし、同期ブロック機構を使用する場合、ロックの使用が多すぎると、デッドロック問題が発生し、同時に取得とリリースにも代償があります。
同期方法としては、このクラスのオブジェクトを持っています。言い換えれば、thisオブジェクトであり、ロックの役割領域は全体的な方法であり、ロックの役割領域が大きすぎて、デッドロック問題を引き起こす可能性があります。同期が不要なコードブロックを含めて、プログラムの動作効率を低下させることもあります。
同期方法であれ、同期ブロックであれ、無限ループを中に含めるべきではない。そうでないと、ロックを獲得した後、無限ループが続き、獲得したロックリソースを解放できなくなり、ロックを待つスレッドが獲得できなくなり、デッドロック問題が発生する。
同期方法
非静的同期方法
すべての非静的同期方法は、同じラッチである。すなわち、例示的なオブジェクトの非静的方法がロックされた後、このオブジェクトの他の非静的方法は、この方法がロックを解除してからロックを取得することができるのを待たなければならない。このタイプの他のオブジェクトは取得でき、他のオブジェクトの非静的方法は異なるロックを使用している。
静的同期方法
すべての静的同期法は同じ錠を使用しています。このタイプのオブジェクト自体は異なるオブジェクトを使用しています。したがって、クラスの非静的方法と静的方法の間にはロック競合がありません。しかし、クラスの静的方法の間にはロック競合があり、
同期ブロック
ロックは選択できますので、同じロックの同期ブロックが存在してこそロック競争があります。注意してください。同期ブロックのロックは選択可能であるが、任意に選択できるものではない(参照対象のインスタンス変数を使用するのは良い選択ではない。同期ブロックは実行中に、nullに設定されていて、nullオブジェクトにロックをかけると異常が発生し、異なるオブジェクトにロックをかけることもロックを使用する目的に反するので)
同期は参照に基づくものではなくオブジェクトに基づいています。複数の変数はオブジェクトを参照し、変数は参照の対象を変更することができます。したがって、参照ではなくインスタンスオブジェクトに従って考えます。原則として!可能性のある再同期ブロックの中でその値を変更するインスタンス変数に対して、永遠にロックしないでください。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。