類似点とスレッドと同期したキーワードロック・インターフェースとの違い

、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(); 
            }

しかし、それは最終的にアクションに同期ロックを解除するのが最善です 

この同期は、両方の同期コードで表示されるようにデッドロックを引き起こすことなく、ロックを解放する異常です。

要約、同期とロックインターフェースとの間の差

  

 

当面うとしていることを、私はフォローアップ追加する言葉を考えます

おすすめ

転載: www.cnblogs.com/yifachen/p/11929652.html