2020-9-04线程池

tech2025-11-09  23

1、线程池 线程池的特点:

线程池的使用主要是同用存在线程,减少对象创建消亡,有效线程最大并发数,避免过多资源竞争,避免阻塞,性能较好

创建线程池:

ThreadPoolExecutor executor=null; executor=new ThreadPoolExecutor();

里面的具体参数看源码,常用的例如:

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler); } public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), handler); }

具体参数如下:

corePoolSize :核心线程数量 maximumPoolSize :线程最大线程数 workQueue :阻塞队列,存储等待执行的任务 很重要 会对线程池运行产生重大影响 keepAliveTime :线程没有任务时最多保持多久时间终止 unit :keepAliveTime的时间单位 threadFactory :线程工厂,用来创建线程 rejectHandler :当拒绝处理任务时的策略

拒绝策略:

handler 拒绝策略 1、CallerRunsPolicy 该策略下,在调用者线程中直接执行被拒绝任务的run方法,除非线程池已经shutdown,则直接抛弃任务。 2、AbortPolicy(默认策略) 该策略下,直接丢弃任务,并抛出RejectedExecutionException异常。 3、DiscardPolicy 该策略下,直接丢弃任务,什么都不做。 4、DiscardOldestPolicy 该策略下,抛弃进入队列最早的那个任务,然后尝试把这次拒绝的任务放入队列
最新回复(0)