ScheduledThreadPoolExecutor不调度的问题

fsneak 2015-05-02 02:23:44
开了一个ScheduledThreadPoolExecutor调度定时任务,但是发现有一定的几率线程池会不调度,所有放入线程池的任务似乎都没有执行。查看dump出来的堆信息,发现有问题的线程池任务堆积到了18000+多个,没问题的线程池则没有未执行的任务。再查看线程池中线程的栈信息,内容如下:
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00002aaade3ed1e0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1971)
at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:583)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:576)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)

我对AQS不是很了解,但是这里我看到,这个线程明明调用的是awaitNanos方法,即超时后会自己返回,但是这里最终却是调用了不会超时的park方法,除非有线程主动唤醒,否则这些线程似乎一直会被挂起不执行。
请问谁了解为什么会这样?
...全文
327 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsneak 2015-05-04
  • 打赏
  • 举报
回复
锁定。。?为啥JDK线程池自己跑着跑着会出现问题。。。?不应该啊
attilax 2015-05-02
  • 打赏
  • 举报
回复
应该锁定了....可以添加个看门狗定时器 唤醒它...或者结束它...
Jboot是专为大型分布式项目和微服务而生。她是一个基于jfinal 和 undertow开发的微服务框架。提供了AOP、RPC、分布式缓存、限流、降级、熔断、统一配置中心、swagger api自动生成、Opentracing数据追踪、metrics数据监控、分布式session、代码生成器、shiro安全控制等功能。 Jboot 的核心组件 1、MVC (基于jfinal) 2、ORM (基于jfinal) 3、AOP (基于guice) 4、安全控制  shiro 5、RPC远程调用  motan  dubbo  grpc  zbus 6、MQ消息队列  rabbitmq  redismq  阿里云商业MQ  activemq  zbus 7、缓存  ehcache  redis  分布式二级缓存ehredis 8、分布式session 9、分布式锁 10、任务调度  cron4j  ScheduledThreadPoolExecutor  分布式任务调度 11、调用监控 (基于metrics) 12、限流、降级、熔断机制(基于hystrix) 13、Opentracing数据追踪  zipkin  skywalking 14、统一配置中心 15、swagger api 16、Http客户端(包含了get、post请求,文件上传和下载等)  httpUrlConnection  okHttp  httpClient 17、分布式下的微信和微信第三方 18、自定义序列化组件 19、事件机制 20、代码生成器 21、等等     Jboot微服务框架 更新日志: v3.9.16 修复:Junit 测试对于个别 ServletRequest 方法没有 mock 到而错处的问题 修复:当 Jboot 有上层 session 时(比如使用 shiro),修改 Controller session 无法同步上层 session 的问题

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧