JAVA中的线程池

80 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情

JAVA中的线程池

前言

在JAVA开发中,我们经常听到线程池,也经常使用到线程池,线程池可以帮我们管理创建的线程、减少资源获取的消耗,提高资源的利用率。今天我们就来聊一聊什么是线程池。

什么是线程池

说线程池之前,我们先来聊一聊池化技术,池化技术是指在我们需要使用一些资源之前,提前准备一些资源,这样在需要使用时,从池中获取,可以直接使用,使用完之后放入池中,可以重复利用。我们平时使用的数据库连接池,Http连接池都是使用的池化技术,这样可以减少我们对资源创建、销毁之间的消耗,并且集中管理,提高资源的利用率。线城池是指先创建若干数量的线程,这些线程都属于睡眠状态,在需要使用时,唤醒一个线程进行处理,处理完成之后,再放回线程池,线程又处于睡眠状态,这样减少了我们创建线程时耗时,并且线程可以复用,提高了效率。

线程池原理

  1. 在有任务需要获取线程时,从线程池中获取
  2. 线程池判断核心线程池是否已经满了,如果满了,则判断等待队列是否已经满了,如果没满,则创建线程
  3. 判断等待队列是否已经满了,如果满了,则判断线程池是否已经满了,如果等待队列没满,则将任务加入等待队列
  4. 判断线程池是否已经满了,如果满了,则按照策略执行,一般会执行拒绝策略,如果线程池没满,则创建线程。

创建线程池

  1. 通过ThreadPoolExecutor手动进行创建线程池
  2. 通过Executors来创建线程池,可以创建FixedThreadPool、SingleThreadExecutor、CachedThreadPool这几种线程池,其中FixedThreadPool是线程数量固定的线程池、SingleThreadExecutor是只有一个线程的线程池、CachedThreadPool是可根据情况进行调整线程数量的线程池。