マルチスレッドロック

com.ruizhukai.demo01パッケージ;
 / * 
* 
* T1およびT2 
* 
*非同期モデルは次のようになるなど、実行のT1、T2、T1スレッド、実行のスレッド、無t2の二つのスレッド間であるもの
同期プログラミングモデルを*:スレッドT1およびT2スレッドの実行スレッドは、同期プログラミングモデルである、T1のスレッドが実行するために、スレッドの実行のT1 T2の終了を待つ必要があります
* 
* 
あなたがそれを同期させたいとき*?なぜそれがスレッドの同期をご紹介しますか!
* 1.アプリケーションの利用率が低いにも関わらず、データを保護するが、そのデータを確実にするためにするためには、スレッドの同期メカニズムに参加しなければならない、安全である
* 
* 2使用のスレッド同期にどのような条件の下で
*最初に、それは、マルチスレッド環境でなければなりません
*第二、マルチスレッド環境では、同じデータを共有する
共有データ変更動作に関連する、第* 
* 
* 
*以下のプログラム例は、離脱示す
* * / 
パブリック クラスTestThread5 {
     公共 静的 ボイドメイン(文字列[]引数){ 
       アカウント = 新しいですアカウント(" actno-001 "500.0 ); 

       Prooessoes P = 新しいProoessoes(A)。
       スレッドT1は = 新しいスレッド(p)を。
       スレッドT2は = 新しいスレッド(p)を。


       t1.start(); 
        t2.start(); 
    } 
} 
// 取款线程
クラスProoessoesが実装Runnableを{
     // 账户
    アカウント行為。

    // コンストラクタ
    Prooessoes(アカウントACT){
         の.act = 働きます。
    } 

    @Override 
    公衆 ボイドラン(){ 
        act.withdraw(100.0 )。
        システム。アウト .println(" 取款成功" + act.getBalance()); 
    } 
} 

// 账户
クラスアカウント{
     プライベート文字列のactno。// 账户
    プライベート ダブルバランス。// 余额

    パブリックアカウント(){}
     パブリックアカウント(文字列actno、ダブルバランス){
         この .actno = actno。
        この .balance = バランス。
    }

    公共 ボイドsetActno(文字列actno){
         この .actno = actno; 
    } 
    公共 ボイド setBalance(ダブルバランス){
         この .balance = バランス; 
    } 

    公共 ダブルgetBalance(){
         リターンバランス; 
    } 
    パブリック文字列getActno(){
         リターンactno; 
    } 
    @ 外部の撤退の方法
    公共 のボイドの撤退(ダブルマネー){ // 撤退作るために、現在のアカウント
         // コードを同期させるために、に同期ステートメントブロック
        /を*
                原理:T1とT2のスレッドスレッド
                ここに、T1のスレッドの実行が、synchronizedキーワードに会った、それはこのオブジェクトをロックするために行くだろう
                、このオブジェクトがロックを見つけることであるならば、プログラム、代替ステートメントブロックのsynchronized文ブロックの実行を入力してくださいコードの
                実行後、スレッドがこのオブジェクトのロック返しT1 

                スレッドはまた、次のコードを実行してきた場合は、スレッドT1内の文のシンクブロックでは、t2は、また、synchronizedキーワードに遭遇した
                ことは、このオブジェクトをロックするために行ってきましたので、そのオブジェクトのロックT1スレッドが保持されている
                だけこのオブジェクトのこの戻りを待た
         * / 
        同期(){
             ダブル ;お金-後=バランス// 離脱前にお金=残量-離脱量
             // 、遅延ようにスレッドのソート順
            トライ{ 
                のThread.sleep(1000年); 
            } 
            キャッチ(例外E){

            } 
            // 更新
            この.setBalance(後)。
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/rzkwz/p/12417452.html