首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:在一定队列大小后阻塞提交的ExecutorService

Java:在一定队列大小后阻塞提交的ExecutorService
EN

Stack Overflow用户
提问于 2010-12-24 03:50:46
回答 8查看 47K关注 0票数 91

我正在尝试编写一个解决方案,其中单个线程产生可以并行执行的I/O密集型任务。每个任务都有大量的内存数据。因此,我希望能够限制当前挂起的任务的数量。

如果我像这样创建ThreadPoolExecutor:

代码语言:javascript
复制
ThreadPoolExecutor executor = new ThreadPoolExecutor(numWorkerThreads, numWorkerThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue(maxQueue));

然后executor.submit(callable)抛出RejectedExecutionException

当队列填满并且所有线程都已经很忙时。

我能做些什么executor.submit(callable)是否在队列已满且所有线程都繁忙时阻塞?

编辑:我试过了this

代码语言:js
复制
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

它在某种程度上达到了我想要的效果,但以一种不优雅的方式(基本上被拒绝的线程在调用线程中运行,因此这阻止了调用线程提交更多线程)。

编辑:(提问5年后)

对于任何阅读此问题及其答案的人,请不要将接受的答案视为一个正确的解决方案。请通读所有答案和评论。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4521983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档