Javaスレッド同期化方法は、ウェイク例を実行します

 お金を撤回するアカウント、お金のインスタンスメソッドを保存

パブリック クラスアカウント{
     プライベート int型のバランス。
    プライベート int型maxBalance。
    パブリックアカウント(int型のバランス)
    {
        この .balance = バランス。
    }
    // 同期方法の引き出し
    公共 同期 無効 transferOut(int型マネー){
          // スレッド同期 
         // 同期(本){ 
        文字列theadName = にThread.currentThread()のgetName();.
         IF(バランス> マネー){
             試み{
                Thread.sleep( 1 )。
            } キャッチ(InterruptedExceptionある電子){
                e.printStackTrace();
            }
            バランス = balance- お金。
            System.out.println(theadName + "背を向ける:" +お金+ "を、バランス:" + バランス);
        } {
            System.out.println(にThread.currentThread()のgetName()。 + "のバランスの欠如" );
        }
//         } 
    }
    
       // 同期方法スレッドが待機セーブ
        公共 同期 無効保存(int型マネー){
             しばらく(バランス+マネー> maxBalance){
                 試み{
                     この .WAIT(); // スレッドが待機 
                } キャッチ(InterruptedExceptionあるE){
                     // TODO自動キャッチ生成されたブロック
                    )(e.printStackTraceを。
                }
            }
            ストリングtheadName = にThread.currentThread()のgetName()。
            バランス =バランス+ お金。
            System.out.println( "保存" +マネー+ "元" + "バランス:" + バランス);
             この .notifyAll(); //は、他のスレッドを覚まします
            
        }
          // 同期方法スレッドが待機セーブ
        公共 同期 無効撤退(int型マネー){
             しばらく(マネー> バランス){
                 試み{
                     この .WAIT(); // スレッドが待機 
                } キャッチ(InterruptedExceptionあるE){
                     // 自動生成のTODOキャッチブロック
                    e.printStackTrace();
                }
            }
        
            バランス = balance- お金。
            System.out.println( "テイク" +マネー+ "元" + "バランス:" + バランス);
             この .notifyAll(); //は、他のスレッドを覚まします
            
        }
}

  試験方法

パブリック クラスのテスト{

    パブリック 静的 ボイドメイン(文字列[]引数){
         
        
        アカウントaccount2 = 新しいアカウント(8000 );
        スレッドT1 = 新しいスレッド(新しい TakeMoney(account2)、 "SON1" )。
        スレッドT2 = 新しいスレッド(新しい TakeMoney(account2)、 "son2" )。
        t1.start();
        t2.start();
    }

}

 

おすすめ

転載: www.cnblogs.com/personblog/p/11703760.html