线程池是一个可以复用线程的技术
用户每发起一个请求,后台就需要创建一个新线程来处理,下次新任务来了肯定又要创建新线程。而创建新线程的开小很大,请求过多时,肯定会产生大量的线程出来,严重影响性能
构造器
public ThreadPoolExecutor(
int corePoolSize, int maximumPooSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler
)
方法名称 | 说明 |
---|---|
void execute(Runnable command) | 执行Runnable任务 |
Future | 执行Callable任务,返回未来任务对象,用于获取线程返回的结果 |
void shutdown | 等全部任务执行完毕后,再关闭线程池 |
List | 立刻关闭线程池,停止正在执行的任务,并返回队列中未执行的任务。 |
策略|详解 ThreadPoolExecutor.AbortPolicy|丢弃任务并抛出RejectedExecutionException异常,是默认的策略 ThreadPoolExecutor.DiscardPolicy|丢弃任务,但是不抛出异常,不推荐 ThreadPoolExecutor.DiscardOldestPolicy|抛弃队列中等待最久的任务,然后把当前任务加入队列 ThreadPoolExecutor.CallerRunsPolicy||由主线程复杂调用任务的run方法从而绕过线程池直接执行
是一个线程池的工具类,提供了很多静态方法用于返回不同特点的线程池对象 这些方法的底层,是通过ThreadPoolExecutor创建的线程池对象
大型并发系统环境中使用Executors如果不注意可能会出现系统风险。 OOM为内存问题 阿里直接不允许用Executors创建线程池
本文章使用limfx的vscode插件快速发布