전에 작성 했던.. "BolckingQueue 와 producer-consumer 패던 활용법 " 예제를 토대로 Executor로 thread pool 예제를 작성거임.
 
1. ConsumerThread.java  수정
  - 등록된 상품이 있으면 무식하게 가져와서 화면에 보여주던 놈을 조금 수정해서 Worker.java 라는 넘으로 Job을 위임함.
  - Executors.newFixedThreadPool 를 사용해 pool 생성 후 Worker.java 를 실행함.
package study.concurrrency;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class ConsumerThread implements Runnable {

 Thread thread;

 private static final Executor exec = Executors.newFixedThreadPool(10);
 
 public void start() {
  thread = new Thread(this);
  thread.start();
 }
 
 @Override
 public void run() {
  // TODO Auto-generated method stub 
  while(true) {   
   exec.execute(new Worker(BlockingQueueSample.getInstance().getData()));
  }
 }
}

2. Worker.java
  - 넘어온 상품(job)을 무식하게 화면에 보여주는 Thread.
package study.concurrrency;

public class Worker implements Runnable {

 String str;
 
 public Worker(String str) {
  this.str = str;
 }
 @Override
 public void run() {
  // TODO Auto-generated method stub
  System.out.println(str);
  try {
   Thread.sleep(500);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 
 }

}

3. 실행
  - 예전 코드 그대로 실행하면 됨.

4. 결과
  - 위에서 설정했던 pool 사이즈 만큼 job 들이 실행되는 것을 확인할 수 있음.

 
Posted by 짱가쟁이