Javaスレッドプールを初めて使用しています。今私は新しいタスクが来て、現在のスレッド番号が最大数であり、キューがいっぱいであるときにユニットテストのユースケースを持っています。私はこの場合、RejectedExecutionException
が投げられることを知っています。しかし、どのように最高のこのシナリオを生成するために、私は今考えることができますが、このようなものです:JavaスレッドプールでRejectedExecutionExceptionをスローするためのユニットテスト
LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(1);
ExecutorService ex = new ThreadPoolExecutor(2, 2, 60L, TimeUnit.MILLISECONDS, queue);
int rejected = 0;
try{
while (true){
ex.submit(() -> {
System.out.println("Queue remaining size: " + queue.remainingCapacity());
System.out.println("Thread amount in pool: " + ((ThreadPoolExecutor)ex).getPoolSize() + "\n");
});
}
}
catch (RejectedExecutionException e){
System.out.println(++rejected);
}
これが基本的な考えであり、私はそれが正しい方法である場合は、この使用してEasyMockを変換する必要があります。スレッドとキューがいっぱいになるまで、タスクを送信し続けるのではなく、EasyMockを使用する方が良い方法があるのだろうかと思います。
ありがとう、これは私が必要なものです – michael