걍 5초가 걸리는 작업들 10개를 ThreadPool 5개에 넣고, 10개의 작업이 끝날 때까지 기다리는 코드

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class TestThread {

   private static ExecutorService indexLoadService = Executors
           .newFixedThreadPool(5);

   public static void main(String[] args) {
       for (int i = 1; i < 10; i++) {
           indexLoadService.execute(new TTest(i));
       }

       indexLoadService.shutdown();
       try {
            // 2초에 한번씩 check한다.
            // awaitTermination의 경우 작업이 종료되었으면 true를 그렇지 않고 timeout이 지났으면 false를 리턴한다.
           while(!indexLoadService.awaitTermination(2000, TimeUnit.MILLISECONDS)){
           }
       } catch (InterruptedException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }

       System.out.println("Done");
   }

   static class TTest implements Runnable {
       private int num;

       TTest(int num) {
           this.num = num;
       }

       public void run() {
           System.out.print(".");
           try {
               Thread.sleep(5000);
           } catch (InterruptedException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
           }
           System.out.println("finish " + num);
       }

   }
}

'programming > Java' 카테고리의 다른 글

Hibernate Quick Reference  (0) 2006.07.27
Java Puzzlers : 9. Tweedledum  (0) 2006.07.19
Javolution  (0) 2006.07.14

+ Recent posts