2012-11-29 2 views
4

기존 코드를 작업하고 있는데이 코드 중 하나에서이 코드 조각을 발견했습니다. 코드는 MyThread.start 대신에 ExecutorService을 사용합니다.Thread.start 대신 ExecutorService 사용

Thread.start 대신 ExecutorService을 사용해야하는 이유를 알려주세요.

protected static ExecutorService executor = Executors.newFixedThreadPool(25); 

while (!reader.isEOF()) { 
    String line = reader.readLine(); 
    lineCount++; 
    if ((lineCount > 1) && (line != null)) { 
     MyThread t = new MyThread(line, lineCount); 
     executor.execute(t); 
    } 
} 

답변

5

나는 MyThreadThreadThread 구현 Runnable 확장 가정합니다. 이 코드에서 Executable을 실행자에게 제출하면 25 개의 스레드 중 하나에서 실행됩니다.

myThread.start()으로 스레드를 직접 시작하는 것의 가장 큰 차이점은 10k 회선이 있으면 동시에 10k 스레드를 시작할 수 있기 때문에 리소스가 상당히 빨리 소모 될 수 있다는 것입니다.

Executor가 정의 된대로 언제든지 25 개의 스레드가 실행되지 않으므로 25 개의 스레드가 모두 사용되는 동안 작업이 제출되면 스레드 중 하나가 다시 사용 가능해질 때까지 대기하고 그 스레드에서 실행하십시오.