大型网站空间费用现在还有人做网站吗

张小明 2026/1/2 15:47:26
大型网站空间费用,现在还有人做网站吗,赚钱软件排行榜前十名,微信小程序官方教程从零开始学 Java 线程池#xff1a;ThreadPoolExecutor 基础教程 一、介绍 线程池是 Java 并发编程中核心的组件#xff0c;本质是管理一组可复用线程的池化技术#xff0c;目的是解决线程频繁创建 / 销毁的性能开销、控制并发线程数量、统一管理线程生命周期等问题。 补ThreadPoolExecutor 基础教程一、介绍线程池是 Java 并发编程中核心的组件本质是管理一组可复用线程的池化技术目的是解决线程频繁创建 / 销毁的性能开销、控制并发线程数量、统一管理线程生命周期等问题。补什么是池化技术池化技术Pooling Technology是一种资源复用与管理的设计模式核心思想是提前创建并维护一组可复用的资源对象池当系统需要资源时直接从池中获取用完后归还到池中而非销毁从而避免频繁创建和销毁资源带来的性能开销。简单来讲池化 资源预创建 复用 统一管理作用降低资源消耗线程是重量级资源占用栈内存、CPU 上下文复用线程避免频繁创建 / 销毁的开销提高响应速度任务到达时无需等待线程创建直接复用空闲线程控制并发风险避免无限制创建线程导致 CPU 满载、内存溢出OOM便于统一管理可监控线程状态、统计任务执行情况、设置超时 / 拒绝策略等。二、原理线程池的核心是ThreadPoolExecutor类JDK 1.5 引入其工作流程任务提交后先判断核心线程池是否已满 → 未满则创建核心线程执行任务核心线程池满 → 判断任务队列是否已满 → 未满则将任务入队等待任务队列满 → 判断最大线程池是否已满 → 未满则创建非核心线程执行任务最大线程池满 → 触发拒绝策略处理无法执行的任务。是否否是是否是否提交任务核心线程数 corePoolSize?创建核心线程执行任务阻塞队列是否已满?任务进入阻塞队列等待线程总数 maximumPoolSize?创建非核心线程执行任务触发拒绝策略处理任务任务执行完成核心线程空闲时从队列取任务执行非核心线程空闲时间 keepAliveTime?销毁非核心线程非核心线程从队列取任务执行线程池资源回收AbortPolicy: 抛出RejectedExecutionException;CallerRunsPolicy: 提交任务的线程自己执行;DiscardPolicy: 直接丢弃任务;DiscardOldestPolicy: 丢弃队列最旧任务再尝试提交三、ThreadPoolExecutor参数ThreadPoolExecutor的构造方法是理解线程池的关键核心参数共 7 个publicThreadPoolExecutor(intcorePoolSize,// 核心线程数常驻线程数即使空闲也不会销毁intmaximumPoolSize,// 最大线程数线程池允许的最大线程数量longkeepAliveTime,// 非核心线程空闲超时时间超时后销毁TimeUnitunit,// keepAliveTime 的时间单位如秒、毫秒BlockingQueueRunnableworkQueue,// 任务等待队列核心线程满后存放任务ThreadFactorythreadFactory,// 线程创建工厂自定义线程命名、优先级等RejectedExecutionHandlerhandler// 拒绝策略任务无法处理时的策略)关键参数说明**核心线程数corePoolSize**线程池长期维持的线程数量即使线程空闲也不会销毁除非设置allowCoreThreadTimeOut(true)。**最大线程数maximumPoolSize**线程池能创建的最大线程数核心线程 非核心线程的总数不能超过此值。**任务队列workQueue**常用实现类ArrayBlockingQueue有界数组队列需指定容量避免队列无限膨胀LinkedBlockingQueue无界 / 有界链表队列默认无界易导致 OOMSynchronousQueue同步队列不存储任务直接传递给线程需配合大的 maximumPoolSizePriorityBlockingQueue优先级队列按任务优先级执行。**拒绝策略handler**当线程池和任务队列都满时触发JDK 提供 4 种默认策略AbortPolicy默认直接抛出RejectedExecutionExceptionCallerRunsPolicy由提交任务的线程如主线程执行任务DiscardPolicy静默丢弃任务无任何提示DiscardOldestPolicy丢弃队列中最旧的任务尝试重新提交当前任务。四、Java 内置线程池Executors 工具类JDK 提供Executors快速创建常用线程池但生产环境不推荐直接使用易导致 OOM 或线程数失控需手动自定义ThreadPoolExecutor。线程池类型核心参数适用场景风险点FixedThreadPoolcorePoolSizemaximumPoolSize队列无界执行长期稳定的任务任务堆积易 OOMSingleThreadExecutor核心 / 最大线程数 1队列无界串行执行任务任务堆积易 OOMCachedThreadPoolcorePoolSize0maximumPoolSizeInteger.MAX_VALUE队列同步队列执行短期异步任务线程数失控易 OOMScheduledThreadPool核心线程数固定最大线程数 Integer.MAX_VALUE执行延迟 / 周期性任务任务过多易 OOM五、线程池使用示例推荐自定义importjava.util.concurrent.*;publicclassThreadPoolDemo{publicstaticvoidmain(String[]args){// 1. 定义核心参数intcorePoolSizeRuntime.getRuntime().availableProcessors();// CPU核心数intmaximumPoolSizecorePoolSize*2;longkeepAliveTime60L;TimeUnitunitTimeUnit.SECONDS;// 有界队列避免无界队列OOMBlockingQueueRunnableworkQueuenewArrayBlockingQueue(100);// 自定义线程工厂便于排查问题ThreadFactorythreadFactorynewThreadFactory(){privateintcount0;OverridepublicThreadnewThread(Runnabler){ThreadthreadnewThread(r);thread.setName(demo-thread-count);thread.setDaemon(false);// 非守护线程thread.setPriority(Thread.NORM_PRIORITY);returnthread;}};// 自定义拒绝策略日志抛异常RejectedExecutionHandlerhandler(r,executor)-{System.err.println(任务 r 被拒绝线程池状态核心线程数executor.getCorePoolSize()活跃线程数executor.getActiveCount()队列大小executor.getQueue().size());thrownewRejectedExecutionException(任务 r 执行失败);};// 2. 创建线程池ThreadPoolExecutorexecutornewThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue,threadFactory,handler);// 3. 提交任务推荐使用submit可获取返回值/异常for(inti0;i10;i){intfinalIi;FutureIntegerfutureexecutor.submit(()-{System.out.println(Thread.currentThread().getName() 执行任务finalI);returnfinalI*2;});// 获取任务结果需处理异常try{System.out.println(任务finalI结果future.get());}catch(InterruptedException|ExecutionExceptione){e.printStackTrace();}}// 4. 关闭线程池必须手动关闭否则JVM不会退出executor.shutdown();// 平缓关闭等待已提交任务执行完毕// executor.shutdownNow(); // 强制关闭中断所有线程返回未执行的任务try{// 等待线程池关闭超时则强制退出if(!executor.awaitTermination(5,TimeUnit.MINUTES)){executor.shutdownNow();}}catch(InterruptedExceptione){executor.shutdownNow();}}}六、线程池核心状态线程池通过ctl原子变量维护状态核心状态包括RUNNING接收新任务处理队列任务SHUTDOWN不接收新任务处理队列任务STOP不接收新任务不处理队列任务中断正在执行的任务TIDYING所有任务执行完毕线程数为 0准备执行terminated()钩子TERMINATEDterminated()执行完毕。七、注意避免使用 Executors 默认实现手动自定义ThreadPoolExecutor指定有界队列和合理的核心 / 最大线程数核心线程数设置CPU 密集型任务如计算核心线程数 CPU 核心数 1减少线程切换IO 密集型任务如数据库 / 网络请求核心线程数 CPU 核心数 * 2利用空闲时间监控线程池状态通过getActiveCount()、getQueue().size()、getCompletedTaskCount()等方法监控优雅关闭线程池使用shutdown()awaitTermination()避免强制关闭导致任务丢失捕获任务异常使用submit()提交任务通过Future.get()捕获异常execute()无法捕获任务内异常避免任务长时间阻塞如数据库查询设置超时防止线程长期占用导致线程池耗尽。八、总结Java 线程池的核心是ThreadPoolExecutor通过核心线程、最大线程、任务队列、拒绝策略的组合实现线程的复用和并发控制。生产环境中需根据业务场景自定义参数避免默认实现的坑同时做好监控和优雅关闭确保线程池稳定运行。附表JDK 版本发布时间线程池核心变化关键说明JDK 1.52004 年首次引入线程池核心 API✅ 新增java.util.concurrent包✅ 核心类ThreadPoolExecutor、ScheduledThreadPoolExecutor✅ 工具类Executors提供固定 / 缓存 / 单线程池等工厂方法✅ 核心接口Executor、ExecutorService、ScheduledExecutorService线程池的 “奠基版本”解决了手动创建线程的性能问题定义了线程池的核心模型核心线程、最大线程、队列、拒绝策略Executors提供的默认实现如newCachedThreadPool成为主流用法但后续被指出存在配置风险。JDK 1.62006 年性能优化 细节补充✅ 优化ThreadPoolExecutor的线程回收逻辑✅ 新增ThreadPoolExecutor.afterExecute()方法支持任务执行后回调✅ 完善ScheduledThreadPoolExecutor的定时任务精度无核心 API 变更主要是性能调优和扩展性增强回调方法的补充让线程池的监控 / 日志能力更灵活。JDK 1.72011 年无核心变更线程池相关 API 无新增 / 修改仅跟随 JDK 整体的并发包优化如 Fork/Join 框架引入但与线程池无关。JDK 1.82014 年Lambda 适配 小优化✅ 支持 Lambda 表达式简化任务提交executor.submit(() - { ... })✅ 优化ThreadPoolExecutor的队列调度逻辑✅ 修复ScheduledThreadPoolExecutor的任务取消 bug核心功能无变化主要是适配 Lambda 提升易用性修复了定时任务中已取消任务仍可能执行的问题。JDK 92017 年模块化 废弃部分 API✅java.util.concurrent归入java.base模块✅ 废弃Executors的newWorkStealingPool(int)重载方法仅保留无参版✅ 新增ExecutorService.shutdownNow()的返回值优化更精准返回未执行任务模块化调整不影响使用废弃的newWorkStealingPool(int)因参数设计不合理被移除无参版基于 CPU 核心数保留。JDK 102018 年无核心变更仅小范围 bug 修复无线程池相关 API 调整。JDK 11LTS2018 年性能优化 安全增强✅ 优化ThreadPoolExecutor的锁竞争减少核心线程创建时的锁开销✅ 修复ScheduledThreadPoolExecutor的内存泄漏问题✅ 新增ExecutorService的submit方法异常处理优化LTS 版本核心稳定主要是生产环境级别的 bug 修复和性能调优解决了长期运行的定时线程池可能导致的内存泄漏问题。JDK 12 - 192019-2022 年无核心 API 变更✅ 小范围 bug 修复如线程池拒绝策略触发时机✅ JDK 19 新增虚拟线程预览特性不影响传统线程池传统线程池 API 进入 “维护期”无新功能虚拟线程Project Loom开始预览但属于全新的并发模型与传统线程池并行存在。JDK 202023 年虚拟线程转正预览→孵化✅Executors.newVirtualThreadPerTaskExecutor()创建虚拟线程池✅ 传统线程池 API 无变更虚拟线程池成为正式孵化特性但传统线程池仍为核心虚拟线程池不替代传统线程池适用于 IO 密集型场景。JDK 21LTS2023 年虚拟线程正式 GA✅ 虚拟线程VirtualThread成为正式特性✅ 新增Executors.newVirtualThreadPerTaskExecutor()稳定 API✅ 传统线程池ThreadPoolExecutor完全兼容无废弃 / 修改里程碑版本虚拟线程池正式可用传统线程池仍为 “CPU 密集型任务” 的首选核心变化线程池分为 “平台线程池”传统和 “虚拟线程池”新按需选择。注虚拟线程VirtualThread 是 JDK 21 正式纳入标准的轻量级用户态线程属于 Project Loom 核心特性核心是通过M:N 映射模型M 个虚拟线程映射到 N 个操作系统内核线程实现高效的并发处理
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设的目录浏览wordpress网址导航模板

长时间盯电脑、低头玩手机,不少科技创业者与投资人都饱受颈肩酸痛、夜不能安的困扰,普通颈椎枕收效甚微。想拥有颈肩“私人定制”按摩体验?今天老贾带来一款藏着专利黑科技的颈椎枕! 按摩颈椎枕的健康巧思(图源于公开专…

张小明 2025/12/29 1:50:12 网站建设

彩票网站做维护是什么公司设计资质

Windows微信机器人终极指南:免费自动化助手从零到精通 【免费下载链接】puppet-xp Wechaty Puppet WeChat Windows Protocol 项目地址: https://gitcode.com/gh_mirrors/pu/puppet-xp 还在为重复的微信消息回复而头疼吗?想要一个24小时在线的智能…

张小明 2025/12/29 1:48:09 网站建设

自动跳转到wap网站南阳做网站

目录已开发项目效果实现截图开发技术系统开发工具:核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式&…

张小明 2025/12/29 1:44:06 网站建设

杭州建网站的公司申请一个电子邮箱

AgileBoot:基于SpringBootVue3的终极全栈开发脚手架完整指南 【免费下载链接】AgileBoot-Back-End 🔥 规范易于二开的全栈基础快速开发脚手架。🔥 采用Springboot Vue 3 Typescript Mybatis Plus Redis 更面向对象的业务建模 面向生产的…

张小明 2025/12/30 5:09:45 网站建设

局域网站建设银行信用卡搜索引擎优化seo价位

🔥AI产品经理,最近的市场又开始变得火热了起来。 大部分公司已经开始从原来的巨量投入,变成盈利的状态了。另外算力成本、数据采集和标注成本也在不断下降📉!AI行业已经开始迎来了新的拐点📈!…

张小明 2025/12/31 4:01:30 网站建设

python做电商网站阿里云虚拟主机

文章目录 摘要Abstract一.背景分析二、创新点三、实验和结果分析总结 摘要 本周研读的文献《基于 GAN 的中文虚假评论数据集生成方法》针对当前中文虚假评论检测研究中缺乏公开数据集的现状,提出了一种利用生成对抗网络(GAN)构建中文虚假评论…

张小明 2025/12/31 8:21:25 网站建设