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

哪些网站可以做免费答题平面设计报价明细表

哪些网站可以做免费答题,平面设计报价明细表,wordpress下载太慢,wordpress 森林在高并发场景下#xff0c;线程池是提升系统性能、稳定性和资源控制的关键机制。本文将深入讲解 Java 线程池的核心原理、实现方式以及实际开发中的最佳使用方法#xff0c;帮助你写出更高效、更安全的并发程序。 一、什么是线程池#xff1f;为什么需要它#xff1f; 线程… 在高并发场景下线程池是提升系统性能、稳定性和资源控制的关键机制。本文将深入讲解 Java 线程池的核心原理、实现方式以及实际开发中的最佳使用方法帮助你写出更高效、更安全的并发程序。 一、什么是线程池为什么需要它 线程池ThreadPool本质上是一个线程复用机制它通过事先创建若干个线程避免了频繁创建与销毁线程带来的资源浪费和系统开销。 没有线程池会怎样 java 复制编辑 new Thread(() - { // 执行任务 }).start(); 每次请求都新建一个线程看似简单实则危险 线程创建是昂贵的系统调用涉及内核态 无控制的新建线程可能导致 OOM CPU 频繁上下文切换影响性能 ✅ 使用线程池的优势 复用已有线程提升性能 控制并发线程数量避免资源耗尽 支持任务排队、优先级等管理机制 提供灵活的拒绝策略增强系统韧性 二、Java 中的线程池体系结构 Java 提供了强大的线程池框架主要由 java.util.concurrent 包中的以下核心类构成 text 复制编辑 Executor → ExecutorService → ThreadPoolExecutor 其中 ThreadPoolExecutor 是线程池的核心实现类。 三、ThreadPoolExecutor 构造函数详解 java 复制编辑 public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueRunnable workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) 参数含义 参数含义corePoolSize核心线程数始终保活maximumPoolSize最大线程数包括救火线程keepAliveTime非核心线程空闲存活时间unit存活时间单位workQueue任务队列常用 LinkedBlockingQueuethreadFactory自定义线程命名/优先级等handler拒绝策略四种预设 自定义 核心线程 VS 非核心线程 核心线程即使空闲也不会被销毁 非核心线程keepAliveTime 过后被回收 四、线程池工作流程图 scss 复制编辑 提交任务 execute() ↓ ┌───────── 判断线程数是否小于 corePoolSize ─────────┐ │ 是 → 创建核心线程执行任务 │ │ 否 → 进入任务队列 workQueue │ │ ↓ │ │ 队列是否满 │ │ ┌─────────────┐ │ │ │ 否 → 排队等待 │ │ │ │ 是 → 是否小于最大线程数 │ │ │ ┌───────────────┐ │ │ │ │ 是 → 创建非核心线程 │ │ │ │ │ 否 → 触发拒绝策略 │ │ └───┴───────────────────────┘ 五、常见线程池工厂方法Executors 虽然不推荐直接使用 Executors 创建线程池因为无法配置参数但了解它们仍有意义 java 复制编辑 Executors.newFixedThreadPool(5); // 固定线程数 Executors.newCachedThreadPool(); // 可伸缩线程数 Executors.newSingleThreadExecutor(); // 单线程 Executors.newScheduledThreadPool(5); // 定时任务 ⚠️ 生产中不建议使用 Executors 的原因 它们底层使用无界队列或最大线程数为 Integer.MAX_VALUE容易导致OOM或过度创建线程。推荐自己使用 ThreadPoolExecutor 进行配置。 六、实战手写一个线程池最佳实践配置 java 复制编辑 ExecutorService executorService new ThreadPoolExecutor( 4, 8, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue(100), new ThreadFactory() { private final AtomicInteger count new AtomicInteger(1); public Thread newThread(Runnable r) { return new Thread(r, biz-thread- count.getAndIncrement()); } }, new ThreadPoolExecutor.CallerRunsPolicy() ); 配置说明 核心线程 4最大线程 8 任务队列最大 100防止堆积过多任务 自定义线程名便于排查问题 拒绝策略使用 CallerRunsPolicy退而求其次主线程执行 七、拒绝策略详解 Java 提供了 4 种内置拒绝策略可实现自定义 策略含义AbortPolicy默认。抛出异常拒绝任务CallerRunsPolicy谁提交谁执行主线程兜底DiscardPolicy直接丢弃任务不抛异常DiscardOldestPolicy丢弃队首任务尝试执行当前任务 八、如何合理配置线程池参数 思路一根据 CPU 密集 / IO 密集 类型设定 CPU 密集型如加解密、算法核心线程数 CPU 核心数 1 IO 密集型如读写文件、数据库核心线程数 CPU 核心数 × 2 java 复制编辑 int coreCount Runtime.getRuntime().availableProcessors(); 思路二监控压测得出结论 利用 JConsole、Arthas、Prometheus Grafana 观察线程使用情况 使用 JMH 进行性能测试 设置队列长度防止堆积过多任务 九、线程池的关闭与优雅停机 java 复制编辑 executorService.shutdown(); // 停止接收新任务等待执行完 executorService.shutdownNow(); // 尝试中断正在运行的任务 推荐使用 java 复制编辑 executorService.shutdown(); if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) { executorService.shutdownNow(); } 总结写线程池的几个黄金法则 ✅ 明确任务特性CPU/IO密集 ✅ 手动配置 ThreadPoolExecutor避免 Executors ✅ 合理设定队列长度和拒绝策略 ✅ 使用命名线程工厂便于排查问题 ✅ 使用监控工具实时观测线程使用情况 ✅ 线程池关闭要优雅避免资源泄露 推荐阅读 《Java 并发编程实战》 阿里巴巴《Java 开发手册》对线程池的规范 JDK 源码ThreadPoolExecutor.java 如果你觉得本文有用欢迎点赞、收藏、评论支持
http://www.dnsts.com.cn/news/4283.html

相关文章:

  • 烟台网站建设 熊掌号小游戏网站
  • 山东网站建设是什么网页设计实训内容步骤记录
  • 宝塔服务器搭建网站教程wordpress列表显示全文
  • 企业网站的设计与开发东莞网站设计建设
  • 上海网站建设 网页做网页无法上传wordpress
  • 保山网站建设海南做网站的公司哪家好
  • 手机网站免费优化php网站外包
  • 网站转化率低保山网站建设哪家好
  • 岳阳网站项目建设报道布料市场做哪个网站好
  • 如何设计公众号需要优化的地方
  • 手机网站自助建站系统南昌企业做网站
  • 电子公司网站设计卖产品的网站怎么做
  • 网站设计分辨率WordPress中文替换布
  • 网站建设人员配置是怎样的网站建设应该应聘什么岗位
  • 国内做外贸网站的有哪些电商网站开发公司
  • 太原企业网站建设dede替换网站模板
  • 做pc端网站必知wordpress重装之后
  • 成都网站建设科东营网站建设预算价格
  • 做网站前如何免费建设一个网站
  • 嘉兴模板开发建站wordpress 文章找不到
  • 途牛网站建设策划书人才网招聘官方网
  • 网站建设高端设计教育培训机构有哪些
  • 携程网站官网wordpress图片网盘插件腾讯
  • 开发手机网站多少钱内存优化大师
  • led行业网站源码做深度的互联网站
  • 景德镇建设局网站微网站设计方案
  • 各省住房和城乡建设厅网站电商网站开发fd
  • 黄石网站制作公司常州网上教科院
  • 万网网站到期后续费一年多少钱印刷设计公司起名
  • 南京外贸网站建设案例网站后台密码错误