同期初心者の白--java並行プログラミングへのJavaの道

同期初心者

(何)総括

Java開発との接触はほぼ一年であったが、単にビジネス機能を達成するために固定されたモデルによると、同社が提供するフレームワークを使用しています。バック考えると、私はJavaの開発にさらに行きたいので、すべての最初は、Java並行プログラミングを理解し、把握したいです

synchronizedキーワードを認識している私は理解していない場合でも、並行プログラミングを勉強したい、その役割は、共有リソースのセキュリティ問題にアクセスするために、複数の同時実行スレッドを制御することで、収集した情報はを通じて学びました:

現在実行中のスレッドの完了は、同期の競合を変更し続けてまで、複数のスレッドが同じオブジェクトにアクセスするのシンクブロックと同期する場合1.、実行競争するスレッドのリソースへの唯一の変更があり、別のスレッドが待機する必要があります実行権コードブロック。

一つのスレッドが同期ブロック同期の対象オブジェクトにアクセスしている場合2.は、他のスレッドは、他のすべてのターゲット・オブジェクトがブロックされている同期コードブロックにアクセスします。

3.スレッドのような、繰り返し同じオブジェクトロックタスクを実行得ることができますスレッド同期化方法は、オブジェクトのメソッドを呼び出し、次に同期メソッドは、オブジェクト自体の同期オブジェクトの別のメソッドを呼び出します。この場合には、トラックのJVMオブジェクトの数がロックされ、オブジェクトのロックが解除されると、オブジェクトのロック-1数、各タスクがオブジェクトのロックを取得するたびに、+1ロックの数は、(5月競争の先頭にタスクを残したときに、一度ロックが0になるまで徐々に数を減らし、マイナス1に、ロックの数をする方法を同期するので、)のみ成功したロック・スレッドタスクの順序は、いくつかのロックを獲得したことを知ることは、リソースがありますフルリリースは、他のタスクは、このリソースのために競争するために始めることができます。

(とき)を使用する場合には

 ブライアンの同期ルール:あなたは別のスレッドが続くかもしれない変数は、「読み」取るか、最後の別のスレッドを取る「読み」しているだろう「書き込み」されている場合は、すでに変数の上に「書かれた」され、その後あなたは、同期を使用すると、「書き込み」のスレッドが同じモニターロックと同期する必要があります/「読み」しなければなりません。

注意:重要なメソッドは同期化されなければならない共有リソースにアクセスするごとに、それ以外の場合は正しく動作しません。

使用方法(どのように)

:2つの用途あって、キーワードを同期 同期方法 及び 同期ブロックを
  • 同期方法:
公共 同期 ボイド countNum(int型 N){}

全ての方法は、特定のオブジェクトの共有と同じロックを同期、このメカニズムは、クラスのインスタンスごとに同じタイミングことを保証する、メンバ関数は、に対応するクラスの多くても1つのインスタンスで得ることができるように、すべてが実行可能な状態で最大1つ(で同期宣言します効果的に限り、同期ように、クラスのメンバ変数にアクセスするには、すべての可能な方法が)宣言されているとして(アクセス違反クラスのメンバ変数を避けるために、)ロック。 

  同期としてだけでなく、静的メソッドは、クラスの静的メンバ変数へのアクセスを制御するために、宣言することができます。

パブリック 静的 同期 ボイド countNum(int型 N){}

 

欠陥は、メソッドを同期:同期方法のための大きな文が大幅に効率に影響を与える場合。

  スレッドクラスの実行()のメソッドは、スレッドの生涯を通じて運営されているように、このクラスのいずれかの呼び出しにつながるように、同期として宣言されている場合一般的に、ある同期メソッドは、決して成功しないだろう。もちろん、我々は同期のように宣言された特別な方法、及びメイン方法で問題を解決するための呼び出しにアクセスクラスのメンバ変数をコーディングすることができますが、Javaは、私たちにとってより良いソリューションを提供し、それはあります同期ブロック。

  • 块同期:
同期(SyncObject.Classは){ 
     // コードは、アクセス制御を可能にします 
}

また、次の形式で書かれていてもよい、this--は現在のクラスを指し、

同期){ 
     // 許可アクセス制御コード 
}

ロック同期ブロックコードは、対象SyncObjectなければならない行うため、特定の機構の上記で(上記のように、クラスのインスタンスまたはクラスであることができます)。コードの任意のブロックのため、および任意のオブジェクトにロックするので、より高い柔軟性を指定することができます。

  synchronizedブロックを使用する場合は、ブライアンの同期ルールに従ってください、そして、重要な共有リソースにアクセスする各メソッドは同期化されています。

 

参考:

https://blog.csdn.net/yuan1013922969/article/details/54971632

 

おすすめ

転載: www.cnblogs.com/EtherealWind/p/11131264.html