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(後)。 } } }