使用方法の3種類を1.synchronized
パブリッククラスクライアント{ パブリック静的無効メイン(文字列[] args){ testSynchronized()。 } プライベート静的ボイドtestSynchronized(){ 新しいはFoo()のsayHello()。 } 静的クラスはFoo { //修饰代码块 ボイドのsayHello(){ 同期(本){ するSystem.out.println( "こんにちは"); } } //修饰示例方法 (){ボイドsayGood同期 するSystem.out.println( "良いです")。 } //修饰静态方法 静的同期ボイドsayHi(){ System.out.printlnは( "HI")。 } } }
(1)方法の変形例を、ロック・オブジェクト・インスタンスの現在の演技を、オブジェクトのロックの現在のインスタンスを取得するために、同期コードを入力する前に、
ロックが現在のクラスオブジェクトを取得するために同期コードを入力する前に、現在のクラスのオブジェクトに作用する、(2)静的メソッドを変更しますロック。それが作るだろう、現在のクラスをロックすることで
、静的メンバーはオブジェクトの任意のインスタンスに属していないので、クラスのすべてのオブジェクトインスタンスを、クラスメンバー(静的が、これは静的クラスではないことを示し
、関係なく、どのように多くの新しいオブジェクトのリソース一つだけなので、そのクラスのすべてのオブジェクト)は、ロックを追加しています。スレッド本当の呼び出しのであれば
、目的に応じ非静的同期方法、およびスレッドはBのインスタンスを呼び出す必要が静的な同期メソッドがクラスに属するオブジェクトを、許可されている
アクセス静的同期メソッドがかかるため、相互排除は起こらないだろう、と約束しましたロックは、ロック現在のクラスであり、そして非静的にアクセス
同期方法ロックは、オブジェクトロックの現在のインスタンスによって占有されています。
(3)指定されたオブジェクトを取得するために、同期コードライブラリ前にロックにロックする特定のオブジェクトのために、ロックオブジェクトを指定し、コードブロックを修正します。そして同期方形
(本)同期、などの方法は、現在のオブジェクトのロックブロックです。同期キーワード静的メソッドは、静的および適用
同期(クラス)コードブロックがClassクラスにロックされます。同期に追加非static staticキーワード:ここについて言及
メソッドは、オブジェクトのインスタンスをロックすることです。
基本原理2.synchronized
JVMレベル属しキーワードsynchronized基本原理。JDKによるビューのFooクラスがてjavapコマンドバイトコードに関連する情報が来る:-vてjavapクライアント$ FOO.CLASS
シンクブロックは同じmonitorenter命令にmonitorenterとmonitorexit命令を使用して達成するステートメント、ポイントを同期
同期コードブロック、同期コードブロックの終了位置を示すmonitorexit命令の開始位置。monitorenter命令スレッドを実行することを試みる場合
(監視対象は、各Javaオブジェクトの件名ヘッダに存在するロックがモニターを取得する取得、同期ロックは、このように取得される
Javaで任意のオブジェクトをロックとして使用することができる理由ロック、それはその理由は)カウンタが0である権利の所有者は、成功することができます設定されたロックカウンタ取得する
1にはインクリメントされます。適切なmonitorexit命令を実行した後、ロックカウンタは、ロックが解除されたことを示す、0に設定されています。あなたがオブジェクトのロックを取得する場合と、失敗した
他のスレッドのロックが解除されるまで、現在のスレッドがブロックされます。
状況は方法の変更を同期
実際に代わって行われる命令及びmonitorexitコマンドをmonitorenterない方法、の同期修正
方法は同期方式であることを示してACC_SYNCHRONIZED識別子は、JVMはACC_SYNCHRONIZEDアクセスフラグを介してする
方法が宣言されている場合、同期方法を実行するように識別します同期呼び出しに対応します。