2010. 6. 29. 16:02
전에 작성 했던.. "BolckingQueue 와 producer-consumer 패던 활용법 " 예제를 토대로 Executor로 thread pool 예제를 작성거임.
1. ConsumerThread.java 수정
- 등록된 상품이 있으면 무식하게 가져와서 화면에 보여주던 놈을 조금 수정해서 Worker.java 라는 넘으로 Job을 위임함.
- Executors.newFixedThreadPool 를 사용해 pool 생성 후 Worker.java 를 실행함.
2. Worker.java
- 넘어온 상품(job)을 무식하게 화면에 보여주는 Thread.
3. 실행
- 예전 코드 그대로 실행하면 됨.
4. 결과
- 위에서 설정했던 pool 사이즈 만큼 job 들이 실행되는 것을 확인할 수 있음.
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()));
}
}
}
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();
}
}
}
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 들이 실행되는 것을 확인할 수 있음.
'java > concurrency' 카테고리의 다른 글
[Concurrency] - interrupt 사용 (0) | 2010.06.29 |
---|---|
[Concurrency] - ExecutorService 를 이용한 동작주기 예제 (0) | 2010.06.29 |
[Concurrency] - BlockingQueue 과 producer-consumer 패턴 활용법 (0) | 2010.06.29 |
[Concurrency] - Singleton Pattern with java (0) | 2010.06.29 |
[Concurrency] - ThreadLocal 사용하기 (0) | 2010.06.28 |