线程池的使用
2021-04-22 18:26
标签:异常 ice 多线程 rdo live The 除了 lex 方式 多线程缺点: 采用线程池的好处 corePoolSize:线程池中核心线程数的最大值,核心线程不会被销毁 maximumPoolSize:线程池中能拥有的最大线程数 workQueue:用于缓存任务的阻塞队列 阻塞队列是指当核心线程无空闲时,有新的任务进来,就会先添加到阻塞队列等待核心线程空闲 上述三者关系:新的任务进来,如果没有空闲线程 keepAliveTime:表示空闲的线程存活的时间 unit:keepAliveTime的单位 handler:拒绝新任务采取的策略 threadFactory:指定线程创建工厂 介绍创建线程的时候我们提到过,javaSE定义了一个Executors类简化我们创建线程池的过程,提供了四个线程池的创建方法 可缓存线程池,线程池长度超过处理需要,可以灵活回收空余线程,若无可回收,则新建线程 特点: 使用 创建一个指定工作线程数量的线程池,每当提交一个任务就创建一个线程,达到线程池最大值则存入到池队列中 优点:具有线程池提高程序效率和节省创建线程时所耗的开销 缺点:线程池中的空闲线程不会自动销毁,线程池中没有可运行任务时,它不会释放工作线程,还有占用一定的系统资源,适合一直频繁有任务进行且任务量稳定的场景 使用 定时线程:该方法创建一个定长的线程池,而且支持定时的以及周期性的任务执行 使用 线程池的使用 标签:异常 ice 多线程 rdo live The 除了 lex 方式 原文地址:https://www.cnblogs.com/JIATCODE/p/13276283.html线程池
1.介绍
2.ThreadPoolExecutor构造函数参数
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue
ThreadPoolExecutor.ThreadAbortPolicy()
抛出RejectedExecutionException
ThreadPoolExecutor.CallerRunsPolicy()
由向线程池提交任务的线程来执行任务
ThreadPoolExecutor.DiscardOldestPolicy()
抛弃最旧的任务(最先提交而没有得到执行的任务)
ThreadPoolExecutor.DiscardPolicy()
抛弃当前的任务
3.四种常见的线程池
1.newCachedThreadPool
//创建线程池
ExecutorService cachedThreadPool = Executors.newCacheThreadPool();
//启动线程,cachedThreadPool线程只能通过实现Runnable接口的方式实现
cachedThreadPool.execute(new Runnable(){
public void run(){
…………
}
});
2.newFixedThreadPool
//3为自定义的线程数
ExecutorService fixThreadPool = Executors.newFixedThreadPool(3);
//使用方式和缓存线程池类似
fixThreadPool.execute(new Runnable(){
public void run(){
…………
}
});
3.newSingleThreadExecutor
4.newScheduleThreadPool
//创建定长线程池
ScheduleExecutorService scheduleThreadPool = Executors.scheduleThreadPool(5);
//设置启动线程
scheduleThreadPool.schedule(new Runnable(){
public void run(){
…………
}
},3,TimeUnit.SECONDS);
//两个参数设置延迟时间,数值和单位,这里是3秒
下一篇:线程安全问题