Javaのインタビューの質問にマルチスレッド - 実行順序の複数のスレッドを確保するために

パブリッククラス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(); 
		} 
	}

  

おすすめ

転載: www.cnblogs.com/mxh-java/p/11041570.html