当前位置: 首页 > news >正文

安徽省建设监理网站兼职做网站的费用

安徽省建设监理网站,兼职做网站的费用,wordpress+附件丢失,佛山的网站建设何谓线程池?本人理解是存放和管理线程的一个容器。 线程池存在的意义是什么? 第一:前面博客提到过创建和销毁线程的操作本身是有性能开销的,如果把使用的线程对象存起来下次用的时候直接取出来用就省去了一次创建和销毁的成本&a…

何谓线程池?本人理解是存放和管理线程的一个容器。

线程池存在的意义是什么?

第一:前面博客提到过创建和销毁线程的操作本身是有性能开销的,如果把使用的线程对象存起来下次用的时候直接取出来用就省去了一次创建和销毁的成本,使用越频繁就越能节省性能,毕竟省到就是赚到嘛。

第二:方便的管理线程,避免很多线程同时争抢资源引发阻塞。毕竟是人家封装过的,因此有专门的属性参数来控制核心线程数、最大并发数、非核心线程的最大限制时长等。

这篇文章内容计划分两部分:

介绍常用的四种线程池;

线程池种一些常用的属性参数;

Android常用的四种线程池:

//线程池 - 固定线程的
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);//线程池 - 缓存的
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
//线程池 -
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2);
//比较特殊不是以ThreadPool结尾
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

第一种:FixedThreadPool线程数量固定的线程池,它只有核心线程。物以稀为贵,只要线程池不销毁线程就不会被回收。当所有的线程都处于活动状态时,新任务都会处于等待状态,直到有线程空闲出来。所有的都是核心线程因此都是精英,时刻准备着能够更快速地响应外界的请求。

第二种:CachedThreadPool线程数量不固定的线程池,没有核心线程全都是非核心线程,并且最大线程数为Integer.MAX_VALUE,超时时间为60s。当线程池中所有线程都处于活动状态时,线程池会创建新的线程来处理新任务,否则就会复用空闲线程来处理,线程空闲超过60秒会被回收。比较适合执行量大但耗时较少的任务。当所有线程都处于闲置状态时,线程池中的线程都会超时而被停止,这时CacheThreadPool几乎不占任何系统资源。

第三种 ScheduledThreadPool总体线程数量不固定的线程池,核心线程数固定,非核心线程无限大,非核心线程闲置时会被立即回收。ScheduledThreadPool这类线程池主要用于执行定时任务和具有固定周期的重复任务。

第四种 SingleThreadExecutor线程数量固定的线程池,只有一个核心线程,并且无超时时间。内部只有一个核心线程,它确保所有的任务都在同一个线程中按顺序执行。用于统一外界所有任务到一个线程,这使得这些任务之间不需要处理线程同步的问题。

线程池种一些常用的属性参数

相信大家都见过一定这样一句话“Android线程池的概念来源于Java的Executor接口”,但实际我们创建线程池直接使用的Executors这个类,但但是线程池的真正实现是ThreadPoolExecutor类。因为看上面四种线程池都是通过调用Executors的四个静态方法来实现的,点进去就会发现它也是创建的ThreadPoolExecutor对象。

通过代码看一下ThreadPoolExecutor类继承关系:

它提供了一系列参数来配置线程池,通过不同的参数可以创建不同的线程池。

以下是各个参数的具体含义:

①CorePoolSize:线程池的核心线程数

默认情况下,核心线程会一直存活,即使它们处于闲置状态。但是如果将ThreadPoolExecutor的allowCoreThreadTimeOut属性设置为true,那么核心线程就会存在超时策略,这个时间间隔由keepAliveTime决定,当等待时间超过keepAliveTime时长后,核心线程就会被停止。

②maximumPoolSize:线程池能容纳的最大线程数

当活动线程数达到这个数值后,后续的新任务将会被阻塞。

③keepAliveTime:非核心线程闲置时的超时时长

超过这个时长,非核心线程就会被回收,当线程池的allowCoreThreadTimeOut属性设置为True时,keepAliveTime同样会作用于核心线程。

④unit:keepAliveTime参数的时间单位,是个枚举值秒、毫秒、分钟

⑤workQueue:线程池中的任务队列,通过线程池execute方法提交的Runnable对象会存储在该队列中。该任务队列是BlockingQueue类型,属于阻塞队列,即队列为空时取出任务的操作会被阻塞,只有队列不为空时才能进行取出操作,而在满队列时添加操作会被阻塞。

⑥threadFactory:线程工厂,作用是为线程池提供创建新线程的能力。ThreadFactory是一个接口,它只有一个方法newThread(Runnable r)用来创建线程。

线程池常用方法:

shutDown() 关闭线程池,不影响已经提交的任务会等它完成

shutDownNow() 立刻关闭线程池,并尝试去终止正在执行的线程

allowCoreThreadTimeOut(boolean value) 允许核心线程闲置超时时被回收

execute提交任务

submit 一般情况下我们使用execute来提交任务,但是有时候可能也会用到submit,使用submit的好处是submit有返回值。

粗糙一点来讲execute(runnable)提交任务时会进行以下操作,不是绝对的哈,因为有的压根就没有核心线程、又得有没有非核心线程。我们可以理解一下它的思想就是先核心线程-满了就排队-排队人也太多了就非核心线程-线程总数也超了就抛异常:

①如果线程池中运行的线程数少于核心线程数,就新建一个线程,并执行该任务。

②如果线程池中运行的线程数大于等于核心线程数,则将任务添加到执行队列中排队,等待执行;

③如果连添加执行队列都失败了那估计是真满了,此时新建一个非核心线程,并在该线程执行任务; 这一步得看情况哈,前提是你的线程池可以有非核心线程并且数量未超过最大值

④如果添加执行队列都失败并且当前线程总数已经达到最大线程数,就拒绝这个任务,抛出RejectedExecutionHandler异常。

才疏学浅,如有错误,欢迎指正,多谢。

http://www.yayakq.cn/news/466394/

相关文章:

  • 网络游戏那个网站做的最好wordpress百度云存储
  • 网站开发团队 需要哪些角色网站开发的工具
  • 免费ppt下载网站有哪些wordpress仿站开发
  • 手机开源网站代码网站推广平台怎么做
  • 湖北住房城乡建设厅网站首页php源码项目门户网站开发
  • 怎么建设阿里巴巴国际网站如何看还在建设的网站
  • 怎么做网站海报轮播图南城网站建设多少钱
  • 网站开发文献综述范文佛山做网站哪家公司好
  • cn免费域名注册网站网站域名所有权证明
  • 石家庄住房城乡建设厅网站怎么推广网页
  • 网站做政务在线考试网站开发报价
  • 手机端便民服务平台网站建设自己网站上做淘宝搜索引擎
  • 做特效很牛的一个外国网站网站维护与建设内容
  • 网站建设管理是国产地图软件哪个好用
  • 品牌网站建设仁術大蝌蚪福州网站建设yfznkj
  • 微商网站如何做推广厦门seo计费
  • php做在线直播网站php电商网站开发流程图
  • 物联网型网站开发网站建设图片上传
  • 网站域名建设me微擎怎么做网站
  • 南昌网站建设报价单wordpress 转 ios app
  • 内江移动网站建设蚌埠公司注册
  • 济南做网站优化哪家好网站底部加备案号
  • 住房和城乡建设厅网站青海省工信部网站备案官网
  • 网站资源建设方案html网页设计框架
  • 网站建设备案网络推广客户渠道
  • 网站建设风险评估10G网站空间
  • 西安微信商城网站开发世界政务网站绩效评估指标体系建设
  • 上海网站备案咨询WordPress建网盘
  • 济南网站建设运营免费制作网络商城网站
  • phpcms做企业网站授权网络运营商怎么联系