스레드 동시 사용 도구 -- CyclicBarrier

2361 단어 Cyclicbarrier
CyclicBarrier가 구현할 수 있는 효과는 여러 개의 스레드가 동시에 실행되는 것이며, 이 스레드가 실행되는 시간은 같지 않다.그러나 어떤 점에서 이 라인들이 모두 집행된 후에야 모든 라인이 아래로 집행될 수 있도록 요구한다.
다음은 샘플 프로그램입니다.
ExecutorService service = Executors.newCachedThreadPool();
		final CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
		for(int i = 0;i<3;i++){
			Runnable runnable = new Runnable(){
				
				Random random = new Random();
				
				@Override
				public void run() {
					try {
						Thread.sleep(random.nextInt(5000));
						System.out.println("point 1:"+Thread.currentThread().getName()+" execute complate.");
						cyclicBarrier.await();
					} catch (InterruptedException | BrokenBarrierException e) {
						e.printStackTrace();
					}
					
					try {
						Thread.sleep(random.nextInt(5000));
						System.out.println("point 2:"+Thread.currentThread().getName()+" execute complate.");
						cyclicBarrier.await();
					} catch (InterruptedException | BrokenBarrierException e) {
						e.printStackTrace();
					}
					
					try {
						Thread.sleep(random.nextInt(5000));
						System.out.println("point 3:"+Thread.currentThread().getName()+" execute complate.");
						cyclicBarrier.await();
					} catch (InterruptedException | BrokenBarrierException e) {
						e.printStackTrace();
					}
					
					try {
						Thread.sleep(random.nextInt(5000));
						System.out.println("point 4:"+Thread.currentThread().getName()+" execute complate.");
						cyclicBarrier.await();
					} catch (InterruptedException | BrokenBarrierException e) {
						e.printStackTrace();
					}
				}
			};
			service.execute(runnable);
			//service.shutdown();
		}
결과:
point 1:pool-1-thread-3 execute complate.
point 1:pool-1-thread-2 execute complate.
point 1:pool-1-thread-1 execute complate.
point 2:pool-1-thread-2 execute complate.
point 2:pool-1-thread-1 execute complate.
point 2:pool-1-thread-3 execute complate.
point 3:pool-1-thread-3 execute complate.
point 3:pool-1-thread-1 execute complate.
point 3:pool-1-thread-2 execute complate.
point 4:pool-1-thread-1 execute complate.
point 4:pool-1-thread-2 execute complate.
point 4:pool-1-thread-3 execute complate.
에서 볼 수 있듯이 어느 점에 도달하는 순서가 고정되지 않을 수 있지만 한 라인이 Point1에 도달했을 때 다른 라인은 Point2에 도달했다. 즉, 모두가 한 점에 도달한 후에야 계속 아래로 집행할 수 있다.

좋은 웹페이지 즐겨찾기