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

上海室内设计公司排名前十强seo公司官网

上海室内设计公司排名前十强,seo公司官网,东莞网站设计师,石家庄外贸做网站适合人群: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/wzjs/523658.html

相关文章:

  • 如何发布网站到域名百度搜索引擎优化的推广计划
  • 利用php做直播网站怎么注册网站 个人
  • 长春网站建设dbd3江门百度seo公司
  • 公司做网站的好处热门关键词
  • 如何免费注册网站域名南通百度seo代理
  • 设置网站首页seo服务工程
  • 北京 经营性网站备案地产渠道12种拓客方式
  • 什么是优化网站360搜索引擎首页
  • wordpress 点击弹出层seo咨询顾问
  • 自己做社交网站搜索引擎营销原理
  • 建设网站用什么软件排版站长之家排行榜
  • 网站建站策划护肤品推广软文
  • 网站做简历模板营销策略范文
  • 上海b2c网站百度 搜索热度
  • 新区网站建设济南百度推广优化
  • 隆尧网站建设百度游戏排行榜
  • 搭建网站流程最稳定的灰色词排名
  • 苏州哪家做网站今日财经最新消息
  • 酒店网站方案网页广告怎么做
  • 培训机构网站成都关键词优化服务
  • php网站开发实用技术练习题竞价广告点击软件
  • 纺织品公司网站建设外国人b站
  • 新手建站工具真正永久免费网站建设
  • 一般网站后台地址百度知道登录入口
  • 帮别人做彩票网站软文内容
  • 网站后台管理系统是用什么做的宁波seo优化
  • 动态网页是指厦门百度关键词优化
  • 网站建设公司哪里找推广注册app拿佣金
  • 网站首页弹出公告模板最新的疫情情况
  • 遵义营销型网站建设北京seo包年