、synchronizedキーワード
1.コードブロックを修正するために使用することができます
同期(本){ // このキーワードは、現在のスレッドの同期オブジェクトを示し IF(NUM == 0){ BREAK ; } NUM - ; のSystem.out.println(にThread.currentThread()のgetName() +「の商品をセクション"+(50-NUM)+チケット、残りの"+ NUM +"張」); }
図2は、同期方法を変更するための方法において使用することができます
トップ私たちの書き込みサイクルにおける//同期メソッド呼び出し
一方、(TRUE){
試み{
のThread.sleep(200)。
}キャッチ(InterruptedExceptionある電子){
// TODO自動生成されたcatchブロック
e.printStackTrace();
}
(sellTicket()){もし
ブレーク。
}
}
プライベート 同期 ブールsellTicket(){ IF(NUM> 0 ){ // キーワードこれは、現在のスレッドの同期オブジェクトことを示し num-- ; 。のSystem.out.println(にThread.currentThread()のgetName() + "最初は買いました" +(10 - NUM)+ "チケット、残りの" + NUM + "張" ); 戻り falseに; } 他{ リターン 真へ; } }
二、ロックインタフェース
1.このインタフェース用ReentrantLockの1 =新しいReentrantLockの();実装クラスは、オブジェクトの実装クラスのL ReentrantLockのを表します
その実装クラスでロックを()呼び出すには、ロック同期を開くには、このメソッドをオブジェクト
そして、最後の同期コード同期ロック解除へのオブジェクトの背後にあります
トライ{ l.lock(); // キーワードこれは、現在のスレッドの同期オブジェクトを表し IF(NUM == 0 ){ BREAK ; } NUMを - ; のSystem.out.println(にThread.currentThread()のgetName() + "購入する最初の" +(50 - NUM)+ " チケット、残りの" + NUM + "張" ); } キャッチ(例外e){ // TODO:例外ハンドル } 最後に{ l.unlock(); }
しかし、それは最終的にアクションに同期ロックを解除するのが最善です
この同期は、両方の同期コードで表示されるようにデッドロックを引き起こすことなく、ロックを解放する異常です。
要約、同期とロックインターフェースとの間の差
当面うとしていることを、私はフォローアップ追加する言葉を考えます