お金を撤回するアカウント、お金のインスタンスメソッドを保存
パブリック クラスアカウント{ プライベート 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(); } }