首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -线程池

Java -线程池
EN

Stack Overflow用户
提问于 2013-04-25 16:53:17
回答 2查看 601关注 0票数 0

我的调度线程池->

代码语言:javascript
复制
private static ScheduledExecutorService pendingCheckScheduler = Executors.newScheduledThreadPool(1);

线程1->

代码语言:javascript
复制
private ScheduledFuture<?> pendingTranStatusCheckHandle=pendingCheckScheduler.scheduleAtFixedRate(new PendingTranStatusCheck(),0,checkForPendingTrans,TimeUnit.SECONDS );

线程2->

代码语言:javascript
复制
private ScheduledFuture<?> forcibleBatchCloseHandle=pendingCheckScheduler.schedule(new ForcibleBatchClose(), waitForPendingTrans, TimeUnit.MINUTES);

Thread 1每10秒执行一次,Thread 2应该在30分钟后启动。

Thread 1的行为与预期一致,而预计在30分钟后启动的Thread2在1小时后启动。

是不是thread1中的延迟导致了这个问题?如果是这样的话,考虑到我们线程中只有一个线程,thread2应该在线程1结束时被赋予优先级,pool.Why Thread2在1小时后被拉伸得太长而无法启动?

我一无所知,希望得到一些pointers.Please的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-25 16:58:55

你的概念略有偏差,这抵消了你的结论。您总共有一个线程,并且计划在该线程上运行两个任务。因此,如果重复的任务长时间执行,占用线程,您肯定会受到干扰。

票数 3
EN

Stack Overflow用户

发布于 2013-04-25 16:58:22

这是因为你在executor中只有一个线程。

代码语言:javascript
复制
Executors.newScheduledThreadPool(1);

它会导致第二个可运行的等待,直到第一个可运行的完成。

尝试使用两个线程:

代码语言:javascript
复制
Executors.newScheduledThreadPool(2);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16210420

复制
相关文章

相似问题

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