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

公司网站设计好北京网站推广技巧

公司网站设计好,北京网站推广技巧,房产网签备案查询,分析无线传感网络的体系架构适合人群:Java中级开发者 | 并发编程入门者 | 系统调优实践者 目录 一、引言:为什么线程池是Java并发的核心? 二、线程池核心知识点详解 1. 线程池核心参数与原理 2. 线程池的创建与使用 (1) 基础用法示例 (2) 内置线程池的隐患 3. 线…

适合人群:Java中级开发者 | 并发编程入门者 | 系统调优实践者

目录

一、引言:为什么线程池是Java并发的核心?

二、线程池核心知识点详解

1. 线程池核心参数与原理

2. 线程池的创建与使用

(1) 基础用法示例

(2) 内置线程池的隐患

3. 线程池调优与注意事项

(1) 参数配置原则

(2) 监控线程池状态

(3) 合理选择拒绝策略

三、进一步学习方向


一、引言:为什么线程池是Java并发的核心?

在高并发场景下,频繁创建和销毁线程会带来巨大开销(如内存抖动、GC压力)。线程池通过复用线程资源管控解决了以下问题:

  • 降低资源消耗:避免线程频繁创建/销毁的开销

  • 提升响应速度:任务到达时直接复用空闲线程

  • 增强可控性:统一管理线程数量、任务队列、拒绝策略

二、线程池核心知识点详解

1. 线程池核心参数与原理

Java线程池通过ThreadPoolExecutor实现,其构造函数包含7个关键参数

public ThreadPoolExecutor(  int corePoolSize,      // 核心线程数(长期保留的线程)  int maximumPoolSize,   // 最大线程数(临时线程=最大-核心)  long keepAliveTime,    // 临时线程空闲存活时间  TimeUnit unit,         // 存活时间单位(秒/毫秒等)  BlockingQueue<Runnable> workQueue, // 任务队列  ThreadFactory threadFactory,       // 线程创建工厂  RejectedExecutionHandler handler   // 拒绝策略  
)  

线程池工作流程

  1. 提交任务时,优先使用核心线程执行

  2. 核心线程满后,任务进入阻塞队列

  3. 队列满后,创建临时线程(不超过maximumPoolSize

  4. 线程和队列均满时,触发拒绝策略

2. 线程池的创建与使用
(1) 基础用法示例
import java.util.concurrent.*;  public class ThreadPoolDemo {  public static void main(String[] args) {  // 创建线程池  ThreadPoolExecutor executor = new ThreadPoolExecutor(  2,                             // corePoolSize  4,                             // maximumPoolSize  30,                            // keepAliveTime  TimeUnit.SECONDS,              // 时间单位  new ArrayBlockingQueue<>(10),  // 任务队列容量10  Executors.defaultThreadFactory(), // 默认线程工厂  new ThreadPoolExecutor.AbortPolicy() // 拒绝策略:直接抛出异常  );  // 提交10个任务  for (int i = 0; i < 10; i++) {  final int taskId = i;  executor.execute(() -> {  try {  System.out.println(  "线程" + Thread.currentThread().getName() +   "执行任务" + taskId  );  Thread.sleep(1000); // 模拟任务耗时  } catch (InterruptedException e) {  e.printStackTrace();  }  });  }  // 关闭线程池(非阻塞,等待所有任务完成)  executor.shutdown();   }  
}  

输出分析

  • 核心线程2个,处理前2个任务

  • 后续任务进入队列,队列容量10,最终4个线程处理10个任务

(2) 内置线程池的隐患

Executors工具类提供了快速创建线程池的方法,但存在风险

// 可能导致OOM(队列无界)  
ExecutorService cachedPool = Executors.newCachedThreadPool();  
ExecutorService fixedPool = Executors.newFixedThreadPool(10);  // 推荐手动创建线程池,明确参数!  
3. 线程池调优与注意事项
(1) 参数配置原则
  • CPU密集型任务

    • corePoolSize = CPU核心数 + 1

    • 队列选择有界队列(如ArrayBlockingQueue

  • IO密集型任务

    • corePoolSize = 2 * CPU核心数

    • 队列容量适当增大

(2) 监控线程池状态
// 定期打印线程池状态  
ScheduledExecutorService monitor = Executors.newScheduledThreadPool(1);  
monitor.scheduleAtFixedRate(() -> {  System.out.println("活跃线程数:" + executor.getActiveCount());  System.out.println("队列任务数:" + executor.getQueue().size());  
}, 0, 1, TimeUnit.SECONDS);  
(3) 合理选择拒绝策略
策略类行为
AbortPolicy(默认)抛出RejectedExecutionException
CallerRunsPolicy由提交任务的线程直接执行
DiscardOldestPolicy丢弃队列中最旧的任务并重试
DiscardPolicy静默丢弃新任务

三、进一步学习方向

  1. 并发工具类

    • CountDownLatch:多线程任务同步

    • CompletableFuture:异步编程模型

  2. 性能优化

    • 使用ThreadLocal避免线程间数据竞争

    • 分析线程转储(Thread Dump)排查死锁

  3. 框架集成

    • Spring的@Async注解实现异步任务

    • 分布式线程池(如Dubbo的线程模型)

http://www.dtcms.com/a/420063.html

相关文章:

  • pKa预测模型——pKa-predictor
  • 加密货币时代下预测市场的兴起
  • EDA设计利器 Altium Designer 25.8.1 安装与使用学习指南
  • 黄岗住房和城乡建设厅官方网站做计算机题的网站
  • 沈阳优化网站公司wordpress最简洁主题
  • BriLLM: Brain-inspired Large Language Model 文章评论
  • 宿舍网页设计html模板厦门seo公司到1火星
  • 质数判断 查表法和计算法结合提高效率 (不能因式分解)
  • linux配置数据库
  • 深圳模板网站建设哪家好二级域名备案
  • HTTP(web缓存与历史迭代)
  • 公司网站维护费用计哪个科目北京市官网
  • 做业精灵官方网站江苏省建设工程招投标网站
  • 蓝点触控:力觉是机器人“稳不稳、准不准”的关键
  • 从Gemini Robotics看通用机器人的技术路径
  • 网站开发文档撰写作业做网站挣钱经历
  • 大型网站开发视频百度云新闻类wordpress模板下载
  • 【LeetCode hot100|Week4】链表
  • 网站信息化建设案例如何做php网站
  • 避免网站侵权做散客机票的网站如何推广
  • AbMole小课堂丨Adezmapimod(SB 203580):经典p38 MAPK抑制剂,在调节细胞炎症、自噬、分化和动物模型中的研究应用
  • 衡水企业网站设计报价机顶盒做网站
  • 局域网站建设模版网络运营需要学什么
  • react16中的hooks的底层实现原理
  • 怎么建设自己淘宝网站首页温州网站设计只找亿企邦
  • 熵的概念及其在机器学习中的应用
  • PCIe协议之低功耗篇之 L1状态
  • nodejs做静态网站淘宝网页版登陆
  • Web打印
  • 前端开发中,关于url的经验总结和注意事项