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

学校网站建设搜狗竞价推广效果怎么样

学校网站建设,搜狗竞价推广效果怎么样,有哪些网站做的很好,太原做网站的工作室Java 线程池详解 线程池是Java并发编程的核心组件,它能高效管理线程生命周期,避免频繁创建销毁线程的开销,提升系统性能和资源利用率。 一、线程池核心优势 降低资源消耗:复用已创建的线程,减少线程创建销毁开销提高…

Java 线程池详解

线程池是Java并发编程的核心组件,它能高效管理线程生命周期,避免频繁创建销毁线程的开销,提升系统性能和资源利用率。

一、线程池核心优势

  1. 降低资源消耗:复用已创建的线程,减少线程创建销毁开销
  2. 提高响应速度:任务到达时可直接使用空闲线程执行
  3. 提高线程管理性:统一分配、监控和调优线程资源
  4. 防止资源耗尽:通过队列缓冲和拒绝策略防止系统过载

二、线程池核心实现 - ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,       // 核心线程数int maximumPoolSize,    // 最大线程数long keepAliveTime,     // 非核心线程空闲存活时间TimeUnit unit,          // 时间单位BlockingQueue<Runnable> workQueue,  // 任务队列ThreadFactory threadFactory,        // 线程工厂RejectedExecutionHandler handler    // 拒绝策略
)

核心参数详解

参数说明典型值
corePoolSize常驻核心线程数CPU密集型:N+1
IO密集型:2N+1
maximumPoolSize最大线程数建议200~500(根据场景调整)
keepAliveTime非核心线程空闲存活时间60s
workQueue任务阻塞队列LinkedBlockingQueue
ArrayBlockingQueue
SynchronousQueue
handler拒绝策略AbortPolicy
CallerRunsPolicy
DiscardPolicy
DiscardOldestPolicy

三、Executors工具类创建的线程池类型

1. FixedThreadPool(固定大小线程池)

ExecutorService fixedPool = Executors.newFixedThreadPool(5);
  • 特点:固定核心线程数 = 最大线程数
  • 队列:无界LinkedBlockingQueue
  • 适用场景:负载较重的服务器

2. CachedThreadPool(可缓存线程池)

ExecutorService cachedPool = Executors.newCachedThreadPool();
  • 特点:核心线程数=0,最大线程数=Integer.MAX_VALUE
  • 队列:SynchronousQueue(直接传递队列)
  • 线程回收:60秒空闲后终止
  • 适用场景:大量短生命周期异步任务

3. SingleThreadExecutor(单线程池)

ExecutorService singleThreadPool = Executors.newSingleThreadExecutor();
  • 特点:单工作线程执行
  • 队列:无界LinkedBlockingQueue
  • 适用场景:顺序执行任务

4. ScheduledThreadPool(定时任务线程池)

ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(3);
  • 支持定时/周期性任务
  • 核心方法:
    // 延迟执行
    scheduledPool.schedule(task, 5, TimeUnit.SECONDS);// 固定频率执行
    scheduledPool.scheduleAtFixedRate(task, 1, 3, TimeUnit.SECONDS);// 固定延迟执行
    scheduledPool.scheduleWithFixedDelay(task, 1, 2, TimeUnit.SECONDS);
    

四、任务队列类型

队列类型特性适用场景
LinkedBlockingQueue无界队列(默认容量Integer.MAX_VALUE)任务量未知但增长较快
ArrayBlockingQueue有界队列(固定容量)防止资源耗尽
SynchronousQueue不存储元素的阻塞队列直接传递任务
PriorityBlockingQueue优先级队列任务需要按优先级处理

五、拒绝策略

当线程池饱和(队列满+线程数=max)时触发

  1. AbortPolicy(默认策略)

    • 抛出RejectedExecutionException
    • 保证任务不丢失
  2. CallerRunsPolicy

    • 由提交任务的线程直接执行
    • 降低新任务提交速度
  3. DiscardPolicy

    • 静默丢弃无法处理的任务
    • 可能丢失任务
  4. DiscardOldestPolicy

    • 丢弃队列中最旧的任务
    • 尝试重新提交当前任务

六、线程工厂(ThreadFactory)

自定义线程创建行为:

ThreadFactory customFactory = r -> {Thread t = new Thread(r);t.setName("Worker-" + threadCounter.getAndIncrement());t.setDaemon(false);t.setPriority(Thread.NORM_PRIORITY);t.setUncaughtExceptionHandler((th, ex) -> System.err.println("Uncaught in " + th.getName() + ": " + ex));return t;
};

七、线程池工作流程

  1. 提交任务
  2. 核心线程未满 → 创建新线程执行
  3. 核心线程已满 → 任务入队列
  4. 队列已满且线程数<max → 创建非核心线程
  5. 队列满且线程数=max → 触发拒绝策略
提交任务
核心线程 < corePoolSize?
创建核心线程执行
任务队列未满?
任务入队列
线程数 < maximumPoolSize?
创建非核心线程执行
执行拒绝策略

八、线程池监控

通过扩展ThreadPoolExecutor实现监控:

public class MonitorThreadPool extends ThreadPoolExecutor {// 构造函数...@Overrideprotected void beforeExecute(Thread t, Runnable r) {super.beforeExecute(t, r);System.out.println("Task start: " + ((TrackedTask)r).getId());}@Overrideprotected void afterExecute(Runnable r, Throwable t) {super.afterExecute(r, t);System.out.println("Task completed: " + ((TrackedTask)r).getId());}@Overrideprotected void terminated() {super.terminated();System.out.println("ThreadPool terminated");}
}

关键监控指标:

  • getPoolSize():当前线程数
  • getActiveCount():活动线程数
  • getCompletedTaskCount():已完成任务数
  • getQueue().size():队列中任务数

九、最佳实践

1. 线程池大小配置

  • CPU密集型N_cpu + 1
  • IO密集型N_cpu * (1 + WT/ST)
    • WT:等待时间
    • ST:计算时间
    • 通常:2N_cpu ~ 5N_cpu

2. 避免使用无界队列

// 错误示例(可能导致OOM)
ExecutorService pool = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>()  // 无界队列
);// 正确做法(使用有界队列)
BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(1000);

3. 合理设置线程存活时间

// 设置非核心线程空闲30秒后回收
new ThreadPoolExecutor(5, 20, 30, TimeUnit.SECONDS, ...);

4. 自定义拒绝策略

// 自定义拒绝策略:记录日志并重试
RejectedExecutionHandler customHandler = (r, executor) -> {logger.warn("Task rejected, saving for retry: " + r.toString());// 保存任务到持久化存储saveTaskForRetry(r);
};

5. 关闭线程池的正确方式

void shutdownGracefully(ExecutorService pool) {pool.shutdown(); // 拒绝新任务try {if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {pool.shutdownNow(); // 取消正在执行的任务if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {System.err.println("Thread pool did not terminate");}}} catch (InterruptedException e) {pool.shutdownNow();Thread.currentThread().interrupt();}
}

十、线程池常见问题

1. 任务堆积导致OOM

  • 解决方案:使用有界队列 + 合理拒绝策略

2. 线程泄漏

  • 场景:任务抛出未捕获异常导致工作线程终止
  • 解决方案:使用自定义线程工厂设置UncaughtExceptionHandler

3. 死锁

  • 场景:池内任务相互等待
  • 解决方案:避免任务间依赖,增大线程池

4. 资源耗尽

  • 场景:过多线程竞争有限资源
  • 解决方案:使用资源隔离(不同业务用不同线程池)

十一、Spring中的线程池

Spring Boot配置线程池:

@Configuration
public class ThreadPoolConfig {@Bean("taskExecutor")public Executor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);executor.setThreadNamePrefix("Spring-Async-");executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());executor.initialize();return executor;}
}

使用注解:

@Async("taskExecutor")
public void asyncProcess() {// 异步处理逻辑
}

总结

Java线程池最佳实践:

  1. 根据场景选择线程池类型:优先使用ThreadPoolExecutor自定义
  2. 合理配置参数:核心线程数、最大线程数、队列容量
  3. 使用有界队列:防止OOM
  4. 设置合理拒绝策略:保证业务可靠性
  5. 添加监控:了解线程池运行状态
  6. 优雅关闭:确保任务完成和资源释放

对于现代应用,推荐使用更高级的并发工具:

  • CompletableFuture:异步编程
  • ForkJoinPool:分治任务
  • Virtual Threads(Java 19+):轻量级线程

正确使用线程池能显著提升系统吞吐量和稳定性,是Java高性能应用的基石。

http://www.dtcms.com/wzjs/6089.html

相关文章:

  • 网站的域名用文字搜索怎么做百度高级搜索指令
  • 国内优秀网站赏析搜狗seo查询
  • 个人做地方门户网站外贸出口平台网站
  • 手把手教你做网站青岛关键词排名系统
  • mt4网站建设网络服务主要包括什么
  • 上海哪家网站建设比较好营销渠道的三个类型
  • 山东企业网站建设广东疫情防控措施
  • dede替换网站模板各大网站排名
  • 营销型网站建设制作营销运营主要做什么
  • 网站怎么才能被百度收录免费推广
  • 下载网站模板国内最新新闻事件
  • 一些做义工的旅游网站专业网络推广公司排名
  • 网站怎么做英语和中文的b2b网站大全免费推广
  • 沙田做网站关键词异地排名查询
  • discuz网站伪静态设置东莞网站推广大全
  • 河北省衡水市景县规划网站域名解析在线查询
  • 钟村免费建站公司seo关键词排名价格
  • 网站交给别人做安全吗重庆人力资源和社会保障网
  • 网站建设模板是什么搜索引擎关键词优化方案
  • 做网站一般几个步骤网络营销是指什么
  • 网站图片在手机上做多大最清晰seo目标关键词优化
  • 公益慈善网站建设方案职业培训机构
  • 给企业做网站运营友情下载网站
  • 网站设计的基本流程是什么互联网营销师国家职业技能标准
  • 网站开发行业信息网国外搜索引擎大全
  • 杭州网站建设方案百度seo报价方法
  • 花钱做网站注意湖南seo优化公司
  • 济南疫情太厉害了常州百度关键词优化
  • 网站使用教程网页关键词排名优化
  • uni做网站首页百度站长平台网页版