我是靠谱客的博主 清爽舞蹈,这篇文章主要介绍开启线程及线程池开启多线程的三种方式常见的4种线程池自定义线程池线程池的运行拒绝策略(4种)阻塞队列(3种),现在分享给大家,希望可以做个参考。

开启多线程的三种方式

1.继承Thread类,重写它的run方法

2.实现Runnable接口 ,重写它的run方法(开发常用)

3.实现callable接口,重写它的call方法,该方法返回值类型 T,而run方法没有返回值

常见的4种线程池

1.可缓存的线程池(CachedThreadPool),先看看池中有没有以前建立的线程,如果有就用,没有就创建新的线程放进线程池,通常用与生命周期很短的异步型任务

2.可重用固定个数的线程池(FixldThreadPool),以共享的无界队列方式来运行这些线程

3.定长线程池(ScheduledThreadPool),支持定时和周期性执行任务

4.单线程化的线程池(SingleThreadPool),保证所有任务都按照指定顺序执行

自定义线程池

自定义线程池需要用到ThreadPoolExecutor类,改类的构造方法有 7 个参数

1.coreSize 核心线程数 (不会被回收),默认情况下当任务到来的时候才会创建线程,但是也有两个方法可以提前创建
2.maxSize 最大线程数
3.long KeepAliveTime : 膨胀出来的线程回收时间(达到核心线程数未达到最大线程数之间的线程)
4.TimeUnit 时间单位
5.BlokingQueue 阻塞队列 (必须有界),自定义的阻塞队列必须有界
6.ThreadFactory 产生线程的工厂
7.rejectedExecutionHandler 拒绝策略

线程池的运行

1.当有任务到来的时候,如果核心线程数没满的话就会创建核心线程执行任务
2.当核心线程数达到最大值,再有任务来的时候会加入阻塞队列,等待执行
3.当阻塞队列也满了的时候,但是最大线程数还没满,就会创建非核心线程执行该任务
4.当最大线程数满了的时候,就会去执行拒绝策略

拒绝策略(4种)

1.直接丢弃任务(DiscardPolicy)
2.丢弃等待时间最长的任务(也就是任务队列的头)DiscardOldestPolicy
3.丢弃任务并抛出异常(默认策略AbortPolicy)
4.将任务交由主线程即提交任务的线程执行(CallerRunsPolicy)

阻塞队列(3种)

1.直接提交 CacheThreadPool 的阻塞队列SynchronousQueue 该队列不存储任务,当有任务来时,调用get方法加入队列,如果没有线程调用take方法获取任务,那么执行put操作的线程将陷入等待
2.无界队列.singleThreadPool和FixedThreadPool使用的是LinkedBlokingQueue队列,当任务超过核心线程数的时候,就会进入队列等待。 ScheduledThreadPool 使用的是DelayedWorkQueue基于优先级的无界队列,会将距离可执行时间最短的任务放到队列的头部,优先级高
3.有界队列.如ArrayBlockingQueue,并配合有限的maxPoolSize来控制资源的消耗

最后

以上就是清爽舞蹈最近收集整理的关于开启线程及线程池开启多线程的三种方式常见的4种线程池自定义线程池线程池的运行拒绝策略(4种)阻塞队列(3种)的全部内容,更多相关开启线程及线程池开启多线程内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(104)

评论列表共有 0 条评论

立即
投稿
返回
顶部