开启线程及线程池

开启多线程的三种方式

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来控制资源的消耗
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值