学习笔记【多线程-第九节:线程池】

本文介绍了Java线程池的作用,如减少线程创建的开销,提高响应速度和可管理性。讲解了自定义线程池的参数,如corePoolSize、maximumPoolSize和workQueue。讨论了不同类型的阻塞队列,并概述了四种拒绝策略。同时,对比了newCachedThreadPool、newFixedThreadPool和newSingleThreadExecutor的使用场景及其潜在问题,强调了根据业务需求自定义线程池的重要性。
摘要由CSDN通过智能技术生成

线程也叫轻量级进程LWP(Light Weight Process)

两种线程模型

用户级线程ULT:
用户程序实现,不依赖操作系统核心,应用提供创建,同步,调度和管理线程的函数来控制用户线程;不许用户态/内核态切换,速度快;内核对ULT无感知,线程阻塞及进程阻塞。

内核级线程KLT:
系统内核管理线程,内核保存线程的状态和上下文信息,线程阻塞不会引起进程阻塞。在多处理器系统上,多线程在多处理器上并行运行。线程的创建、调度和管理由内核完成,效率比ULT慢,比进程操作快。

Java用的时KLT线程模型。

ULT的线程表在个进程中(用户空间),KLT的线程表在CPU中(内核空间)。

Java线程创建是依赖于系统内核的,通过JVM调用系统库创建内核线程,内核线程与Java Thread 1:1映射。

线程池的作用

Java线程依赖于内核线程,创建线程需要进行操作系统状态的切换。为避免资源过度消耗需要设法重用线程执行多个任务。线程池就是一个线程缓存,负责对线程进行统一分配,调优与监控。

什么时候使用线程池?
  • 单个任务处理时间比较短
  • 需要处理的任务量很大
线程池的优势
  • 重用存在的线程,减少线程的创建,消亡的开销,提高性能。
  • 提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即执行。
  • 提高线程的可管理性,可统一分配,调优和监控。

自定义线程池

任务必须实现Runnable或Callable。

final ThreadPoolExecutor pool=new ThreadPoolExecutor(2,3,60,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值