Как я могу получить RejectedExecutionException
Кто-нибудь может предоставить мне пример получения RejectedExecutionException Возможно, пример из реальной жизни. Заранее спасибо.
3 ответа:
Любой, кто может предоставить мне пример получения RejectedExecutionException, возможно, реальный пример из жизни.
Конечно. Следующий код отправляет 2 задания в пул потоков, в котором выполняется только 1 поток. Он использует
Поскольку выполнение каждого задания занимает некоторое время, 2-й execute заполняет очередь и выдаетSynchronousQueue
, Что означает, что никакие задания не будут храниться в очереди заданий.RejectedExecutionException
.// create a 1 thread pool with no buffer for the runnable jobs ExecutorService threadPool = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new SynchronousQueue<Runnable>()); // submit 2 jobs that take a while to run /// this job takes the only thread threadPool.execute(new SleepRunnable()); // this tries to put the job into the queue, throws RejectedExecutionException threadPool.execute(new SleepRunnable()); public class SleepRunnable implements Runnable { public void run() { try { // this just sleeps for a while which pauses the thread Thread.sleep(10000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); return; } } }
Отправка задач исполнителю после вызова
shutdown(
на нем вызовет это исключение.Кроме того, если исполнитель использует ограниченную блокирующую очередь, если очередь заполнена, то задача не блокируется, а завершается с ошибкой-быстро, за исключением.
Этот вопрос уже был задан и на него дан ответ. : Что может быть причиной RejectedExecutionException отправка задач в пул потоков дает исключение RejectedExecutionException
Этот код выдает ошибку, потому что мы пытаемся запустить задачу, но исполнитель выключен вы можете обратиться к ссылке выше для дальнейших разъяснений ответ выглядел довольно полным:
public class Executorz { public static void main(String[] args) { Executorz ex = new Executorz(); ExecutorService es = Executors.newFixedThreadPool(10); for (int i = 0; i<100 ; i++){ System.out.println("Executed"); es.execute(ex.getNewCountin()); if (i==20) es.shutdown(); } } public Countin getNewCountin(){ return new Countin(); } public class Countin implements Runnable { @Override public void run() { for (double i =0; i<1000000000 ; i++){ } System.out.println("Done"); } } }