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

网站开发岗位名称厦门国外网站建设公司

网站开发岗位名称,厦门国外网站建设公司,山东电力建设河北分公司网站,网站开发难度和小程序开发难度文章目录1.为什么要使用线程池#xff1f;2.你们哪些地方会使用到线程池#xff1f;3.线程池有哪些作用#xff1f;4.线程池的创建方式#xff1f;5.线程池底层是如何实现复用的#xff1f;6.ThreadPoolExecutor 核心参数有哪些 #xff1f;7.线程池创建的线程会一直在运… 文章目录1.为什么要使用线程池2.你们哪些地方会使用到线程池3.线程池有哪些作用4.线程池的创建方式5.线程池底层是如何实现复用的6.ThreadPoolExecutor 核心参数有哪些 7.线程池创建的线程会一直在运行状态吗9.线程池底层 ThreadPoolExecutor 底层实现原理10.线程池队列满了任务会丢失吗 11.线程池如何合理配置参数 1.为什么要使用线程池 因为频繁的开启线程或者停止线程 线程需要重新被 CPU 从就绪到运行状态调度 需要发生CPU 的上下文切换 效率非常低。 2.你们哪些地方会使用到线程池 实际开发项目中 禁止自己 new 线程使用线程池来统一维护管理。 案例分享 项目中异步发邮件和发短信就是用到了多线程但是呢我们自己如果通过new thread线程异步的去发短信或者邮件这样会存在隐患导致线程没有使用到线程池进行维护和统一管理。因此我们采用线程池的方案使用springboot整合线程池实现异步发短信或者邮件。当项目比较小时可以采用此方案如果项目比较大做异步时建议采用使用MQ异步。 3.线程池有哪些作用 核心点 复用机制 提前创建好固定的线程一直在运行状态 实现复用 限制线程创建数量。 1.降低资源消耗 通过池化技术重复利用已创建的线程 降低线程创建和销毁造成的损耗。 2.提高响应速度 任务到达时 无需等待线程创建即可立即执行。 3.提高线程的可管理性 线程是稀缺资源 如果无限制创建 不仅会消耗系统资源 还会因 为线程的不合理分布导致资源调度失衡 降低系统的稳定性。 使用线程池可以进行统一的分 配、 调优和监控。 4.提供更多更强大的功能 线程池具备可拓展性 允许开发人员向其中增加更多的功能。 比 如延时定时线程池 ScheduledThreadPoolExecutor 就允许任务延期执行或定期执行。 4.线程池的创建方式 首先线程池的创建方式我们可以通过JDK原生自带的方式Executors提供了4个API有可缓存线程池、可定长度线程池、可定时线程池、单例线程池但是非常遗憾阿里巴巴java开发手册他不推荐我们使用JDK源码中自带的线程池为什么呢因为我们的线程池底层都是基于 ThreadPoolExecutor 构造函数封装的而 ThreadPoolExecutor构造函数中底层都是采用无界队列缓存我们的任务的会无限缓存任务容易发生内存溢出会导致我们最大线程数会失效。 Executors.newCachedThreadPool(); 可缓存线程池 Executors.newFixedThreadPool() 可定长度 限制最大线程数 Executors.newScheduledThreadPool() 可定时 Executors.newSingleThreadExecutor(); 单例 底层都是基于 ThreadPoolExecutor 构造函数封装 5.线程池底层是如何实现复用的 本质思想创建一个线程不会立马停止或者销毁而是一直实现复用。 提前创建固定大小的线程且一直保持在正在运行状态可能会非常消耗 cpu 的资源当需要线程执行任务将该任务提交缓存在并发队列中如果缓存队列满了则会执行拒绝策略 正在运行的线程从并发队列中获取任务执行从而实现多线程复用 6.ThreadPoolExecutor 核心参数有哪些 corePoolSize核心线程数量 一直正在保持运行的线程 maximumPoolSize最大线程数线程池允许创建的最大线程数。 keepAliveTime超出 corePoolSize 后创建的线程的存活时间。 unitkeepAliveTime 的时间单位。 workQueue任务队列用于保存待执行的任务。 threadFactory线程池内部创建线程所用的工厂。 handler任务无法执行时的处理器。 7.线程池创建的线程会一直在运行状态吗 不会 例如配置核心线程数 corePoolSize 为 2 、最大线程数 maximumPoolSize 为 5 我们可以通过配置超出 corePoolSize 核心线程数后创建的线程的存活时间例如为 60s 在 60s 内没有核心线程一直没有任务执行则会停止该线程。 8.为什么阿里巴巴不建议使用 Executors ? 因为默认的 Executors 线程池底层是基于 ThreadPoolExecutor 构造函数封装的采用无界队列存放缓存任务会无限缓存任务容易发生内存溢出会导致我们最大线程数会失效。 内存溢出与最大线程数会失效 源码中多线程缓存队列采用的是LinkedBlockingQueue而LinkedBlockingQueue的缓存队列大小是无界的Integer.MAX_VALUE缓存队列中会一直会有新的线程加入进来当达到服务器的瓶颈时就会发生内存溢出。最大线程数开启的前提是缓存队列容量慢的时候采用开启最大线程数。 9.线程池底层 ThreadPoolExecutor 底层实现原理 10.线程池队列满了任务会丢失吗 11.线程池如何合理配置参数 自定义线程池就需要我们自己配置最大线程数 maximumPoolSize为了高效的并发运行当 然这个不能随便设置。这时需要看我们的业务是 IO 密集型还是 CPU 密集型。 CPU 密集型 CPU 密集的意思是该任务需要大量的运算而没有阻塞CPU 一直全速运行。CPU 密集任 务只有在真正的多核 CPU 上才可能得到加速(通过多线程)而在单核 CPU 上无论你开几 个模拟的多线程该任务都不可能得到加速因为 CPU 总的运算能力就那些。 CPU 密集型任务配置尽可能少的线程数量以保证每个 CPU 高效的运行一个线程。 一般公式CPU 核数1个 线程的线程池 IO 密集型 I0 密集型即该任务需要大量的 IO即大量的阻塞。在单线程上运行 I0 密集型的任务会导 致浪费大量的 CPU 运算能力浪费在等待。 所以在 IO 密集型任务中使用多线程可以大大的加速程序运行即使在单核 CPU 上这种加 速主要就是利用了被浪费掉的阻塞时间。 I0 密集型时大部分线程都阻寒故需要多配置线程数 公式 CPU 核数 * 2 CPU 核数 / 1 - 阻塞系数 阻塞系数 在 0.8~0.9 之间 查看 CPU 核数 System.out.println(Runtime.getRuntime().availableProcessors());
http://wiki.neutronadmin.com/news/441858/

相关文章:

  • 网站建设的摊销做网站的公司深
  • 中原区快速建站公司电话网站开发费的会计处理
  • 潮州网站建设大连口碑最好的装修公司
  • 天王手表官方网站视频拍摄要求
  • 创建官方网站网址云盘可以做网站吗
  • 商业网站页面陕西建设厅继续教育网站
  • 专门做潮搭的网站win优化大师有免费版吗
  • 广州网站建设工程vps小学生
  • wordpress可以做什么站深圳微信网站建设公司
  • 官方网站建设怎么样淘宝网站建设的公司
  • 做信息浏览的网站策划案免费1级做爰片动漫在线观看网站
  • 小说网站需求分析网站的图片怎么做
  • 门户网站推广渠道wordpress开启评论验证码
  • 手机上什么网站网站的域名是什么意思
  • 免费网站管理软件检查网站是否做网站地图
  • 南昌网站建设模板技术公司合肥网站关键词优化公司
  • 哈尔滨网站建设v5star公司logo设计免费生成图片
  • 网站建设的感想和建议河北省住建厅电子证书查询
  • 如何做移动支付网站网站建设什么软件
  • 做网站接电话一般要会什么问题网站服务器租用需要注意的点
  • 有什么好的免费网站做教育宣传语南通如何制作一个网站
  • 网站优化首页付款wordpress优缺点
  • 各大网站下载韩国网站 后缀
  • 传奇免费网站模板下载wordpress 微博模板
  • 艺术学校示范校建设专题网站wordpress红色
  • 电商网站首页图片.net 网站开发项目结构
  • 网站开发需求方案网页成品
  • 中国建设银行招聘信息网站6软件开发技术培训课程
  • 西安建设网站制作微信小程序怎么制作游戏
  • 驻马店 网站建设网站建设灬金手指科杰