![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【线程/线程池】
文章平均质量分 85
线程/线程池
zero__007
这个作者很懒,什么都没留下…
展开
-
Future.get() 在配置RejectedExecutionHandler为ThreadPoolExecutor.DiscardPolicy策略时一直阻塞
1、重写DiscardPolicy,取消任务: ((FutureTask) r).cancel(true)。2、不使用DiscardPolicy,建议还是用线程池默认的AbortPolicy,可以重写,打印日志,再调用super.rejectedExecution(r, executor),抛出默认异常行为。3、使用java.util.concurrent.FutureTask#get(long, java.util.concurrent.TimeUnit) 带有超时的方法获取结果。转载 2022-10-14 16:46:50 · 422 阅读 · 0 评论 -
又一起线上事故,线程池千万别乱用
在高并发、异步化等场景,线程池的运用可以说无处不在。线程池从本质上来讲,即通过空间换取时间,因为线程的创建和销毁都是要消耗资源和时间的,对于大量使用线程的场景,使用池化管理可以延迟线程的销毁,大大提高单个线程的复用能力,进一步提升整体性能。 今天遇到了一个比较典型的线上问题,刚好和线程池有关,另外涉及到死锁、jstack命令的使用、JDK不同线程池的适合场景等知识点,同时整个调查思路可以借鉴,特此记录和分享一下。 01 业务背景描述 该线上问题发生在广告系统的核心扣费服务,首先简单交代下大致的业务流程,方便转载 2021-02-26 16:31:19 · 525 阅读 · 0 评论 -
再聊线程池
关于线程池的介绍在http://blog.csdn.net/zero__007/article/details/43795287、http://blog.csdn.net/zero__007/article/details/44102239 已经介绍了,这里只是稍微补充补充。RejectedExecutionHandler ThreadPoolExecutor的构造函数中会有该参数,表示拒绝策原创 2017-11-15 19:58:26 · 216 阅读 · 0 评论 -
Java线程池
public interface ExecutorService extends Executor为Executor提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成Future的方法。可以关闭ExecutorService,这将导致其拒绝新任务。提供两个方法来关闭ExecutorService。shutdown()方法在终止前允许执行以前提交的任务,而shutdownNow()方法原创 2015-03-27 13:34:48 · 543 阅读 · 0 评论 -
线程池的异常处理机制
转载自:https://github.com/aCoder2013/blog/issues/3 先上两段代码: ExecutorService threadPool = Executors.newFixedThreadPool(1); threadPool.execute(() -> { System.out.println("execute"转载 2017-12-27 18:44:12 · 1519 阅读 · 0 评论 -
Tomcat的StandardThreadExecutor
JDK中的ThreadExecutor中的execute方法的处理逻辑应该都知道: 1.小于等于Coresize:创建线程执行; 2.大于CoreSize:加入队列; 3.队列满且小于maxSize:有空闲线程使用空闲线程执行,没有的话,创建线程执行;如果大于maxSize则拒绝策略执行。 这样会造成一个现象,如果设置的不恰当,队列使用LinkedBlockingQue原创 2018-01-24 16:16:59 · 1199 阅读 · 2 评论 -
线程池使用拒绝策略时需要注意的坑
线程池使用FutureTask的时候如果拒绝策略设置为了DiscardPolicy和DiscardOldestPolicy并且在被拒绝的任务的Future对象上调用无参get方法那么调用线程会一直被阻塞。转载 2017-12-27 18:54:44 · 10985 阅读 · 3 评论 -
线程池的诡异异常
转载自:https://crossoverjie.top/2019/03/12/troubleshoot/thread-gone/ 现象:线程池使用时,任务中抛出一个没有捕获的异常时,线程池没有挂掉,并且任务也没有继续运行。 代码模拟: ExecutorService executor = Executors.newSingleThreadExecutor(); executo...转载 2019-06-24 19:18:33 · 909 阅读 · 0 评论 -
Thread.State
转载自:http://blog.csdn.net/codetomylaw/article/details/40263261 http://blog.csdn.net/fenglibing/article/details/6411940 一般查看Java程序堆栈信息时,会使用jstack工具来获得java stack和native stack的信息,如果现在运行...转载 2016-08-09 22:28:41 · 464 阅读 · 0 评论 -
查找Java程序中CPU使用率最大的线程
1、获得进程pid ps -ef | grep java 2、列出该进程的所有线程 ps p ${pid} -L -o pcpu,pmem,pid,tid // tid即线程 或者 top -H -p ${pid} 3、找出哪个线程tid占用最多,然后将这个tid转换为16进制 printf "%x\n" ${tid} 4、打印线程的堆栈信息...原创 2016-08-24 21:26:22 · 1501 阅读 · 0 评论 -
Fork/Join 框架
1 什么是 Fork/Join 框架 Fork/Join 框架是 Java7 供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork/Join 框架中, Fork 就是把一个大任务切分为若干子任务并行的执行, Join 就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算 1+2+。。。+ 10000,可以分原创 2015-02-13 15:54:15 · 473 阅读 · 0 评论 -
Thread.interrupt与LockSupport
转载自:http://agapple.iteye.com/blog/970055 http://www.tuicool.com/articles/MveUNzF 首先抛几个问题: Thread.interrupt()方法和InterruptedException异常的关系?是由interrupt触发产生了InterruptedException...转载 2016-06-02 21:33:43 · 1051 阅读 · 0 评论 -
线程泄漏
转载自:http://blog.csdn.net/huoyunshen88/article/details/8618642 当单线程应用程序中的主线程抛出一个未捕获的异常时,因为控制台中会打印堆栈跟踪(也因为程序停止),所以很可能注意到。但在多线程应用程序中,尤其是在作为服务器运行并且不与控制台相连的应用程序中,线程死亡可能成为不太引人注目的事件,这会导致局部系统失败,从而产生转载 2016-03-29 17:17:22 · 2562 阅读 · 0 评论 -
ScheduledExecutorService
public interface ScheduledExecutorService extends ExecutorService一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。schedule 方法使用各种延迟创建任务,并返回一个可用于取消或检查执行的任务对象。scheduleAtFixedRate 和 scheduleWithFixedDelay 方法创建并执行某原创 2015-03-27 13:38:06 · 300 阅读 · 0 评论 -
LockSupport
转载自: http://blog.csdn.net/hengyunabc/article/details/28126139 http://www.jb51.net/article/88395.htm LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程。转载 2017-11-06 19:33:30 · 225 阅读 · 0 评论