Java线程池

1. 线程池来源的背景

  1. 在面向对象编程中,创建和销毁对象是很 费时间的,因为创建一个对象要获取内存 资源或者其它更多资源。
  2. Java虚拟机将试图跟踪每一个对象,以便 能够在对象销毁后进行垃圾回收。所以提 高服务程序效率的一个手段就是尽可能减 少创建和销毁对象的次数,特别是一些很 耗资源的对象创建和销毁。

池化技术: 池化技术简单点来说,就是提前保存大量的资源,以备不时之需。在机器资源有限的情况下,使用池化技术可以大大的提高资源的利用率,提升性能等。
在编程领域,比较典型的池化技术有:线程池、连接池、内存池、对象池等。

2. 线程池的作用

减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行集合任务时使用的线程)的方法。每个ThreadPoolExecutor还维护着一些基本的统计数据,如完成的任务数。

3. 线程池的原理
先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。

4. JDK线程池简介和使用

为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效的进行线程控制。他们都在java.util.concurrent包中,是JDK并发包的核心。其中一个比较重要的类:Executors,扮演者线程工厂的角色,我们通过Executors可以创建特定功能的线程池。 Executors创建线程池的方法:

  1. newFixedThreadPool()方法,该方法返回一个固定数量的线程池,该方法的线程数始终不变,当有一个任务提交时,若线程池中空闲,则立即执行,若没有,则会被暂缓在一个任务队列中等待有空闲的线程去执行。
  2. newSingleThreadExecutor()方法,创建一个线程的线程池,若空闲则执行,若没有空闲则暂缓在任务队列中。
  3. newCachedThreadPool()方法,返回一个可根据实际情况调整线程个数的线程池,不限制最大线程数量,若用空闲的线程则执行任务,若无则不创建线程。并且每一个空闲线程会在60秒后自动回收。
  4. newScheduledThreadPool()方法,该方法返回一个SchededExecutorService对象,但该线程池可以指定线程的数量。

以上4中方法的本质内部底层都是实际创建的都是一个ThreadPoolExecutor对象,只是对ThreadPoolExecutor构造方法,进行了默认值的设定。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在以上方法不足以供我们使用时,可以自己定义线程池,构造方法如下:

public ThreadPoolExecutor(int corePoolSize, 
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory) {…}

构造器参数介绍

corePoolSize 核心线程数(表示线程池初始化的时候就存在多少个线程);
maximumPoolSize 线程池最大容量大小;
keepAliveTime 线程池空闲时,线程存活的时间;
TimeUnit 时间单位;
ThreadFactory 线程工厂;
BlockingQueue任务队列(线程数大于线程池中线程的数量发布放入的队列);
RejectedExecutionHandler 线程拒绝策略;(例如线程池中有两个线程,若这两个线程都被占用第3个线程来了可以设定拒绝策略拒绝这个线程)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值