如何进行ScheduledThreadPoolExecutor分析与线程池防坑


这篇文章给大家介绍如何进行ScheduledThreadPoolExecutor分析与线程池防坑,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java线程池使用不当会导致很多线上问题,常见的有:线程池默认使用无界队列,任务过多时,JVM OOM不设置最大线程数,线程数目暴涨定时执行,执行一次任务耗时太长甚至一直阻塞,达不到定时执行的目的线程池内的线程是非守护线程,停止JVM时出问题使用submit方法,没有调用future.get()导致异常被吞,execute不会有异常被吞的问题死锁问题,并不常见,但是有时候写复杂了可能会出现。一句话,使用线程池和诸如阻塞队列 香港云主机这种抽象层次比较高的工具时,尽量不要再用低层次的类,如lock,wait(),notify()等,这样混用会导致难以排查的问题。ScheduledExecutorService分析上面的代码块意图每5秒执行一次任务,但是执行这个任务需要耗费10秒(sleep),那么肯定不能达到5秒一次的效果。分析一下原因。
定时执行功能的实现类是ScheduledThreadPoolExecutor,它是一个线程池加延迟队列来实现的,延迟队列是使用堆来实现的,也就是根元素值最大或者值最小,在定时任务执行这个场景下,根元素就是下一个要执行的任务,然后有一个等待时间。然后看ScheduledFutureTask这个类的run()方法可以看到如果一次执行时间很长,是达不到定时执行的目的,最终的表现就是一次连着一次执行,如果我们确实需要精准的定期执行,不关注每次多长时间,该怎么办?很简单,再弄一个线程池专门用来干活关于如何进行ScheduledThreadPoolExecutor分析与线程池防坑就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

相关推荐: C++引用怎么实现

这篇文章主要讲解了“C++引用怎么实现”,文中的讲解内容简单清晰, 香港云主机易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++引用怎么实现”吧!感谢各位的阅读,以上就是“C++引用怎么实现”的内容了,经过本文的学习后,相信大家对C++…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/23 20:11
下一篇 09/23 20:12

相关推荐