static class th extends Thread{
@Override
public void run() {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("OK");
}
}
}
즉 Thread 를 상속받는 클래스를 생성한 뒤에 해당 클래스를 인스턴스화 한 뒤 .start() 로 쓰레드를 실행할 수 있다.
ThreadPoolExecutor executor= new ThreadPoolExecutor(2, 4, 5, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
즉 기본 활성 쓰레드에 배치하여 작업을 수행하고 최대 쓰레드 개수까지 늘어날 수 있는 것이다. 위 executor 을 생성하면 원하는 작업을 대기열에 담아둘 수 있는데, 할당된 쓰레드 개수에 맞춰서 먼저 요청된 쓰레드가 실행되고 앞의 작업이 끝나면 다음 쓰레드가 순차적으로 실행된다.
쓰레드 실행을 요청하기 위해서 executor.execute(Runnable); 을 사용하면 된다. Runnable 은 implements 하면 되기 때문에, 클래스를 선언한 뒤 Runnable 을 implements 하여 run 을 구현한 다음 생성하여 사용하면 된다.
OK!
[b] OK
[a] OK
[a] OK
[b] OK
[b] OK
[a] OK
[b] OK
[a] OK
[b] OK
[a] OK
[c] OK
[d] OK
[c] OK
[d] OK
[c] OK
[d] OK
[d] OK
[c] OK
[c] OK
[d] OK
[e] OK
[e] OK
[e] OK
[e] OK
[e] OK