线程池

1、线程池优点

1、降低资源消耗  降低线程的创建和销毁造成的消耗

2、提高响应速度   不需要先创建线程再运行

3、提高线程的可管理性   使用线程池可以统一分配,调优和监控。

2、线程池的流程

  1. 如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(这一个过程需要获取全局锁)

  2. 如果当前运行线程数等于或者多余corePoolSize,则加入到队列BlockQueue

  3. 如果无法加入到BlockQueue(队列已满),则创建新的线程来处理任务,(需要获取全局锁)

  4. 如果创建的线程将使得当前运行的线程数量大于MaximunPoolSize,任务将被拒绝,并调用非常重要的RejuectExecutionHandler.rejectExecution()方法

3、线程池的参数

    1. corePoolSize,线程池的基本大小

    2. runnableTaskQueue:用于保存等待执行的任务的阻塞队列,可以有以下选择

      1. ArrayBlockingQueue

      2. LinkedBlockingQueue

      3. synchronousQueue

      4. priorityBlockingQueue

    1. maximumPoolSze:线程池最大数量

    2. ThreadFacotry:用于设置创建线程的工厂

    3. RejectedExecutionHandler:饱和策略

                       AbortPolicy(默认)

                     CallerRunPolicy(只用调用者所在的线程来运行任务)

                     DiscardOldestPolicy    丢弃一个任务

                     DiscardPolicy(不处理,丢弃掉)

                    自己实现RejectedExecutionHandler接口自定义策略(记录日志或者持久化存储不能处理的任务)

                5. keepAliveTime:线程保持活动的时间

                6.TimeUtil:线程保持活动的单位

4、向线程池提交任务

    1、execute方法用于提交不需要返回值的任务

     2、submit可以用于提交有返回值的任务。返回的是个future对象,可以通过future.get()来获得运行结果。

5、关闭线程池(中断)

     1、shutdownNow()  将线程池状态设置为STOP,然后中断所有的线程,并返回等待执行任务的列表。

     2、shundown   将线程池置为SHUTDOWN,然后中断没有正在执行任务的线程。

     3、只要调用了上面两个的其中任何一个,isShutDown都会返回true。

    4、如果执行中的任务也可以结束,使用shutdownnow()。

    5、无法响应中断的线程无法停止

6、合理配置线程池

    任务:CPU密集型任务,IO密集型任务和混合型任务

    优先级不同的任务可以使用PriiorityQueue来处理。

7、线程池的监控

    线程池提供了一些监控和统计API用于对线程池进行监控。

 

转载于:https://www.cnblogs.com/YDDMAX/p/5645186.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值