任何人都可以向我提供获取RejectedExecutionException的示例 可能是一个真实的例子。 提前谢谢。
答案 0 :(得分:3)
在调用shutdown(
之后将任务发送给执行程序将引发此异常。
此外,如果执行程序使用有界阻塞队列,如果队列已满,则提交任务将不会阻止,但会因异常而失败。
答案 1 :(得分:2)
任何能够向我提供获取RejectedExecutionException的示例的人都可能是一个真实的例子。
不确定。以下代码将2个作业提交到一个只运行1个线程的线程池中。它使用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;
}
}
}
答案 2 :(得分:0)
这个问题已经被问及并回答: What could be the cause of RejectedExecutionException Submitting tasks to a thread-pool gives 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");
}
}
}