java线程池工作原理及拒绝策略详解
2021-02-02 04:17
标签:car 插入图片 带来 java线程 任务队列 线程 exec OLE tor 在多线程编程中,我们经常使用线程池来管理线程,以减缓线程频繁的创建和销毁带来的资源的浪费,在创建线程池的时候,经常使用一个工厂类来创建线程池Executors,实际上Executors的内部使用的是类ThreadPoolExecutor。它有一个最终的构造函数如下: corePoolSize:线程池中的核心线程数量,即使这些线程没有任务干,也不会将其销毁。 maximumPoolSize:线程池中的最多能够创建的线程数量。 keepAliveTime:当线程池中的线程数量大于corePoolSize时,多余的线程等待新任务的最长时间。 unit:keepAliveTime的时间单位。 workQueue:在线程池中的线程还没有还得及执行任务之前,保存任务的队列(当线程池中的线程都有任务在执行的时候,仍然有任务不断的提交过来,这些任务保存在workQueue队列中)。 threadFactory:创建线程池中线程的工厂。 handler:当线程池中没有多余的线程来执行任务,并且保存任务的多列也满了(指的是有界队列),对仍在提交给线程池的任务的处理策略。 RejectedExecutionHandler 是一个策略接口,用在当线程池中没有多余的线程来执行任务,并且保存任务的多列也满了(指的是有界队列),对仍在提交给线程池的任务的处理策略。 公共策略接口: 这个策略接口有四个实现类: AbortPolicy:该策略是直接将提交的任务抛弃掉,并抛出RejectedExecutionException异常。 DiscardOldestPolicy:该策略是当执行器未关闭时,从任务队列workQueue中取出第一个任务,并抛弃这第一个任务,进而有空间存储刚刚提交的任务。使用该策略要特别小心,因为它会直接抛弃之前的任务。 CallerRunsPolicy:该策略并没有抛弃任何的任务,由于线程池中已经没有了多余的线程来分配该任务,该策略是在当前线程(调用者线程)中直接执行该任务。 类ThreadPoolExecutor中持有一个RejectedExecutionHandler接口的引用,以便在构造函数中可以由外部客户端自己制定具体的策略并注入。下面看一下其类图: java线程池工作原理及拒绝策略详解 标签:car 插入图片 带来 java线程 任务队列 线程 exec OLE tor 原文地址:https://www.cnblogs.com/itnotes-4ever/p/12811812.html
DiscardPolicy:该策略也是将任务抛弃掉(对于提交的任务不管不问,什么也不做),不过并不抛出异常。
下一篇:Java常用类介绍