Javaのマルチスレッドの学習は、ロック機構が--synchronized

複数のスレッドでJava同期ロック機構を使用する場合は、ロックがオブジェクトに注意を払う必要があり、次の例では、オブジェクトのロックではありません

例:銀行口座を持つ2人の運転は、彼女の夫は、銀行の窓口業務の妻でATMマシンで動作します

アカウントの種類:百万アカウントがあります。

パブリック クラスACOUNT {
     公共 のintお金= 100 ; 
}

ATMの機械クラス:内部のお金を取るためにオブジェクトやACOUNTの数の存在は、プロセスtakeMoneyに追加同期メカニズム

パブリック クラス ATMには実装されたRunnable {
     プライベートACOUNTのACOUNTを。
    プライベート int型withdrawMoney。

    公衆 ATM(ACOUNTのACOUNT、int型withdrawMoney){
         この .acount = ACOUNT。
        この .withdrawMoney = withdrawMoney。
    } 

    @Override 
    公共 ボイドラン(){ 
        takeMoney()。
    } 

    公共 同期 ボイド takeMoney(){     // 取钱
        場合(acount.money < withdrawMoney){
             リターン; 
        } 
        試し{ 
            のThread.sleep( 200は);   // スレッド1を入力した後、スリープ、スレッド2は依然として赤字になる可能性があり、中に来ることができる 
        } キャッチ(InterruptedExceptionあるE){ 
            e.printStackTrace(); 
        } 
        System.out.printlnは(スレッド。.currentThread()のgetName() + "とら" + withdrawMoney + "万元" ); 
        acount.money - = withdrawMoney; 
        のSystem.out.println( "口座残高:" + acount.money); 
    } 
}

Customerクラス:二人が使用するために、それぞれ、2つのATM機(1つのアナログカウンタ)、ユニークなアカウントを作成します

パブリック クラスカスタマー{
     公共の 静的な 無効メイン(文字列[] args)を{ 
        ACOUNTのACOUNT = 新新ACOUNT(); 
        ATM ATM1 = 新しい新しい ATM(ACOUNT、70);     // ATM操作するアカウントで、夫、妻の運転アカウントカウンター 
        ATM ATM2 = 新しい新しい ATM(ACOUNT、80 ); 
        スレッド夫 = 新しい新しいスレッド(ATM1、 "夫" ); 
        スレッド妻 = 新しい新しいスレッド(ATM2、 "妻" ); 

        husband.start(); 
        wife.start(); 
    } 
}

結果:

あなたは追加見ることができ、同期がまだスレッドセーフ後に発生します。

分析:同期機構は、一般に、データ・オブジェクトの操作に使用され、この方法は、この例では、クラスの動作を考慮して2つのクラスが、アカウントクラス、クラス2台のATMマシンの合計、ATMマシンがあるtakeMoney ATM機に属する方法でありますので、私たちは、アカウントタイプをロックする必要があります。

 

おすすめ

転載: www.cnblogs.com/chiweiming/p/11109078.html