为了账号安全,请及时绑定邮箱和手机立即绑定

Java多线程

标签:
Java

• 线程池的好处


提高响应速度(减少了创建新线程的时间)


降低资源消耗(重复利用线程池中线程,不需要每次都创建)


提高线程的可管理性:避免线程无限制创建、从而销耗系统资源,降低系统稳定性,甚至内 存溢出或者CPU耗尽


• 线程池的应用场合


需要大量线程,并且完成任务的时间端

对性能要求苛刻

接受突发性的大量请

• Executor:线程池顶级接口,只有一个方法

• ExecutorService:真正的线程池接口 • void execute(Runnable command) :执行任务/命令,没有返回值,一般用来执行Runnable

• Future submit(Callable task):执行任务,有返回值,一般又来执行Callable • void shutdown() :关闭连接池

• AbstractExecutorService:基本实现了ExecutorService的所有方法

• ThreadPoolExecutor:默认的线程池实现类

• ScheduledThreadPoolExecutor:实现周期性任务调度的线程池

• Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池

• Executors.newCachedThreadPool():创建一个可根据需要创建新线程的线程池

• Executors.newFixedThreadPool(n); 创建一个可重用固定线程数的线程池

• Executors.newSingleThreadExecutor() :创建一个只有一个线程的线程池

• Executors.newScheduledThreadPool(n):创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行


• 线程池参数


corePoolSize:核心池的大小 • 默认情况下,创建了线程池后,线程数为0,当有任务来之后,就会创建一个线程去执行任务。 • 但是当线程池中线程数量达到corePoolSize,就会把到达的任务放到队列中等待。

maximumPoolSize:最大线程数。 • corePoolSize和maximumPoolSize之间的线程数会自动释放,小于等于corePoolSize的不会释放。当大于了 这个值就会将任务由一个丢弃处理机制来处理。

keepAliveTime:线程没有任务时最多保持多长时间后会终止 • 默认只限于corePoolSize和maximumPoolSize之间的线程

TimeUnit: • keepAliveTime的时间单位

BlockingQueue: • 存储等待执行的任务的阻塞队列,有多中选择,可以是顺序队列、链式队列等

ThreadFactory • 线程工厂,默认是DefaultThreadFactory,Executors的静态内部类

RejectedExecutionHandler: • 拒绝处理任务时的策略。如果线程池的线程已经饱和,并且任务队列也已满,对新的任 务应该采取什么策略。 • 比如抛出异常、直接舍弃、丢弃队列中最旧任务等,默认是直接抛出异常。

• 1、CallerRunsPolicy:如果发现线程池还在运行,就直接运行这个线程 ,即调用任务的run()方法绕过线程池直接执行.

• 2、DiscardOldestPolicy:在线程池的等待队列中,将头取出一个抛弃,然后将当前线程放进去。

• 3、DiscardPolicy:什么也不做

• 4、AbortPolicy:java默认,抛出一个异常:


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消