线程池的构建与使用

1 篇文章 0 订阅
1 篇文章 0 订阅
import org.apache.commons.lang3.concurrent.BasicThreadFactory;

import java.util.concurrent.*;

public class StudentIDTest {

  // 线程工厂
  private static final ThreadFactory namedThreadFactory = new BasicThreadFactory.Builder()
    .namingPattern("studentReg-pool-%d")
    .daemon(true)
    .build();

  // 等待队列
  private static final BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(1024);

  // 线程池服务
  private static final ThreadPoolExecutor EXECUTOR_SERVICE = new ThreadPoolExecutor(
20,
200,
30,
TimeUnit.SECONDS,
workQueue,
namedThreadFactory,
new ThreadPoolExecutor.AbortPolicy()
      );

  public static void main(String[] args) {

  }
}

依赖

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.10</version>
</dependency>

线程池就像是一个池子,里面装满了线程,随用·随取,线程可以被复用,一个线程,可以执行A任务,也可以执行B任务,于是线程不在频繁创建和销毁。

new Thread(register)意味着一个进程对象只能执行一个任务,而线程池让线程与任务分离,不在紧密绑定

线程池的另一个重要概念是,线程并不是无限大的(因为计算机cpu,内存等资源毕竟有限),所以线程池中存在的资源也是有限的,其它过剩的任务就需要排队。待任务完成,有空闲的线程后才能继续执行任务。

 一、创建线程工厂实例

new BasicThreadFactory.Builder()
  .namingPattern("studentReg-pool-%d")
  .daemon(true)
  .build();

namingPattern()方法是定义线程名字的格式,相当于线程名称模板,需要根据具体的业务需求把studentReg改掉

Builder不是方法,是构造函数,BasicThreadFactory类中有一个内部类Bulider。

new BasicThreadFactory.Bulider()创建了内部类的实例对象。

二、创建线程等待队列实例

线程中没有空闲的线程时,其他的任务,就需要再队列中等待。

三、创建线程实例

ThreadPoolExecutor构造函数的参数较多,七个参数的说明

四、使用线程池任务

只要执行线程池对象的execute()方法,把实现了Runnable接口的实例对象传入即可。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值