パブリッククラスAは、実装したRunnable { @Override ます。public void実行(){ // TODO自動生成されたメソッドスタブ のSystem.out.println( "A"); } } publicクラスBはRunnableを実装{ @Override 公共ボイドラン(){ // TODO自動生成方法スタブ のSystem.out.println( "B")を。 } } publicクラスCはRunnableを実装{ @Override 公共ボイドラン(){ // TODO自動生成方法スタブ のSystem.out.println( "C")を。 } } / ** *方法一: * @param argsを * @throws InterruptedExceptionあります * / 公共の静的な無効メイン(文字列[]引数)InterruptedExceptionある{スロー // TODO自動生成方法スタブ スレッドスレッド1 =新しいスレッド(新しいA())。 thread1.start(); thread1.join(); =新しいスレッド(新しいBを())スレッド2、スレッド。 thread2.start(); thread2.join(); スレッドthread3 =新しいスレッド(新しいC())。 thread3.start(); }
スレッドが終了する前に、次のスレッドを実行することができる等join()メソッドを使用し
/ ** *方法2: * / @Test ます。public void TEST2(){ //スレッドプールのスレッドを1つだけ作成 ExecutorServiceのExecutors.newSingleThreadExecutor ExecutorServiceの=(); ExecutorService.submit(新しい新しいA()); ExecutorService.submit( B新しい新しい()); ExecutorService.submit(新しい新しいC()); executorService.shutdown(); }
すべてのタスクが指定された順序で実行されることを保証するために、スレッド・プールを作成するための唯一のスレッド
/ ** *线程顺序执行类 * @author 15735400536 * * / publicクラスのステップオーバー{ プライベート揮発int型カウント= 1; 公共ボイド()スローInterruptedExceptionある{ 同期(本){ (カウント= 1!)ながら{ 待機(); } のSystem.out.println( "线程A")。 = 2をカウント。 notifyAll(); // IF(== 1カウント){ //するSystem.out.println( "线程A")。 //カウント数= 2; 。// //Thread.currentThread()のnotifyAll(); //のnotifyAll(); //}他{ // //Thread.currentThread().wait(1000)。 // 待つ(); //} } } 公共ボイドB()InterruptedExceptionある{スロー 同期(本){ ながら(カウント= 2!){ 待ちます(); } のSystem.out.println( "线程B")。 = 3を数えます。 notifyAll(); //(== 2カウント){もし //するSystem.out.println( "线程B")。 //カウント数= 3; 。// //Thread.currentThread()のnotifyAll(); //のnotifyAll(); //}他{ // //Thread.currentThread().wait(1000)。 // 待つ(); //} } } 公共ボイドC()InterruptedExceptionある{スロー 同期(本){ ながら(カウント= 3!){ 待機(); } のSystem.out.println( "线程C")。 = 1を数えます。 }キャッチ(InterruptedExceptionある電子){ notifyAll(); //もし(== 3カウント){ //するSystem.out.println( "线程C")。 //カウント数= 0; 。// //Thread.currentThread()のnotifyAll(); //のnotifyAll(); //}他{ // //Thread.currentThread().wait(1000)。 // 待つ(); //} } } } publicクラススレッドAはRunnableを実装して、{ プライベートステップオーバーステップオーバーを。 パブリックスレッドA(ステップオーバーステップオーバー){ this.stepOver =ステップオーバー。 } @Override 公共ボイドラン(){ // TODO自動生成方法スタブ 試み{ stepOver.a()。 // TODO自動生成されたcatchブロックの e.printStackTrace(); } } } publicクラスThreadBはRunnableを{実装 プライベートステップオーバーステップオーバーを、 公共ThreadB(ステップオーバーステップオーバー){ this.stepOver =ステップオーバー。 } @Override 公共ボイドラン(){ // TODO自動生成方法スタブ 試み{ stepOver.b()。 }キャッチ(InterruptedExceptionある電子){ // TODO自動生成キャッチブロック e.printStackTrace(); } } } publicクラスThreadCはRunnableを{実装 プライベートステップオーバーステップオーバーを、 公共ThreadC(ステップオーバーステップオーバー){ this.stepOver =ステップオーバー。 } @Override 公共ボイドラン(){ // TODO自動生成方法スタブ 試み{ stepOver.c()。 }キャッチ(InterruptedExceptionある電子){ // TODO自動生成キャッチブロック e.printStackTrace(); } } } / ** *方法三 * / @Test 公共ボイドTEST3(){ ステップオーバーステップオーバー=新たなステップオーバー()。 以下のために(INT i = 0; iが10 <; I ++){ スレッドB =新しいスレッドを(新しいThreadB(ステップオーバー))。 b.start(); =新しいスレッド(新しいスレッドA(ステップオーバー))をスレッド。 a.start(); スレッドC =新しいスレッド(新しいThreadC(ステップオーバー)); c.start(); } }