내 사용 사례 : 'N'스레드가 항상 집행자 시작 후 사용할 수있는 것을 의미 스레드 풀의 최소 크기 'N'을 설정필요에 따라 스레드를 생성하고 적용 가능한 경우 만료시키는 ThreadPoolExecutor를 만드는 방법은 무엇입니까?
- .
- 스레드 풀의 최대 크기를 'M'으로 설정하십시오.
- 모든 'M'스레드가 사용 중이면 수신 작업이 대기열에 있어야합니다.
- 유휴 상태의 시간 초과를 기준으로 만료 (M -N) 스레드.
나는 HttpClient 뒤에 풀 관리자와 비슷한 설정이 가능하다고 생각합니다. 내가 ThreadPoolExecutor를 사용하여 그것을 달성하려고하지만 길을 찾을 수 없습니다. 가능한가?
다음은 테스트 할 예입니다. 이것에 대해
public class ExecutorExample {
public static void main(String[] args) throws InterruptedException {
int minPoolSize = 2;
int maxPoolSize = 10;
int ttlMillis = 100;
ThreadPoolExecutor startupExecutor = new ThreadPoolExecutor(minPoolSize,
maxPoolSize, // surprisingly this is not obeyed.
ttlMillis,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + ":" + startupExecutor.getCorePoolSize());
startupExecutor.execute(new MyRunnable(i));
}
for (int i = 0; i < 20; i++) {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + ":" + startupExecutor.getCorePoolSize());
}
}
}
class MyRunnable implements Runnable {
int n;
public MyRunnable(int n) {
this.n = n;
}
@Override
public void run() {
try {
Thread.sleep(2000);
System.out.println(Thread.currentThread().getName() + ":" + n);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
필요에 따라 ThreadPoolExecutor (corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue)가 아닌가? –
@RomanPuchkovskiy 어떤 큐 객체를 염두에 두시겠습니까? 나는 시험 할 것이다. – phani
당신이 이상한 요구 사항입니다 ... 왜 들어오는 작업이 대기되기 전에 스레드 수를 N에서 M *으로 늘려야합니까? –