java中线程池详细信息介绍

线程池通过重用已存在的线程降低资源消耗,提高响应速度和系统稳定性。它包括线程池管理器、工作线程、任务接口和并发队列等组件。线程池参数如corePoolSize、maximumPoolSize、阻塞队列类型等影响其性能。Executors类提供线程池创建,不同的阻塞队列如LinkedBlockingQueue、SynchronousQueue和PriorityBlockingQueue各有优劣。当线程池饱和时,有多种饱和策略可供选择。
摘要由CSDN通过智能技术生成

01 为什么使用线程池

   启动一个新线程涉及与操作系统交互 , 需花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限  

线程池优势:
(1) 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
(2) 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
(3) 提高线程的可管理性。线程是稀缺资源,若无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
(4) 线程池提供了扩展功能,如延迟定时线程池

线程池中线程没销毁没任务时处于死循环运行状态(消耗cup资源),有任务了就直接执行,减少从就绪状态到运行状态开销
线程从阻塞到唤醒的开销比较大,所有一般使用乐观锁的机制

如果自己new线程,被别人知道了可以攻击,不停的调用这个接口,导致创建很多线程导致服务器崩溃


02 线程池组件

(1) 线程池管理器(ThreadPool)
        用于创建并管理线程池,包括创建线程池,销毁线程池,添加新任务
(2) 工作线程(PoolWorker)
      线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;
(3) 任务接口(Task)
      每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;

(4) 并发队列(taskQueue)
用于存放没有处理的任务。提供一种缓冲机制,如果使用无界队列,可能会发生溢出


⑤Executors 类,提供了一系列静态工厂方法用于创先线程池,返回
的线程池都实现了 ExecutorService 接口

⑥线程池参数
A、corePoolSize(线程池的基本大小)
B、runnableTaskQueue(任务队列):用于保存等待执行的任务的阻塞队列
1)LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO(先进先出)
排序元素,吞吐量通常要高于 ArrayBlockingQueue。静态工厂方法 Executors.newFixedThreadPool()使用了这个队列。
2)SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞 吐 量 通 常 要 高 于 LinkedBlockingQueue , 静 态 工 厂 方 法
Executors.newCachedThreadPool 使用了这个队列。
3)PriorityBlockingQueue:一个具有优先级的无限阻塞队列。
C、maximumPoolSize(线程池最大大小):线程池允许创建的最大线程数。
D、ThreadFactory:用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字。
E、RejectedExecutionHandler(饱和策略):当队列和线程池都满了,说明线程池处于饱和状态,那么必须采取一种策略处理提交的新任务。
这个策略默认情况下是 AbortPolicy,表示无法处理新任务时抛出异常。以下是 JDK1.5 提供的四种策略:
1 AbortPolicy:直接抛出异常
2 CallerRunsPolicy:只用调用者所在线程来运行任务
3 DiscardOldestPolicy:丢弃队列里最近的一个任务并执行当前任务
4 DiscardPolicy:不处理,丢弃掉
5 当然也可以根据应用场景需要来实现 RejectedExecutionHandler 接
口自定义策略。如记录日志或持久化不能处理的任务。
F、keepAliveTime(线程活动保持时间):线程池的工作线程空闲后,
保持存活的时间。所以如果任务很多,并且每个任务执行的时间比较短,可以调大这个时间,提高线程的利用率。
G、TimeUnit(线程活动保持时间的单位):可选的单位有天(DAYS),
小时(HOURS),分钟(MINUTES),毫秒(MILLISECONDS),微秒(MICROSECONDS, 千分之一毫秒)和毫微秒(NANOSECONDS, 千分之一微秒)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值