使用和理解线程池

1.使用线程池的目的:

线程是稀缺资源,不能频繁的创建。

解耦作用;线程的创建与执行完全分开,方便维护。

应当将其放入一个池子中,可以给其他任务进行复用

2.线程池原理:

核心的思想就是把宝贵的资源放到一个池子中;每次使用都从里面获取,用完之后又放回池子供其他人使用。

3.配置线程池:

常见的线程:

Executors.newCachedThreadPool():无限线程池。

Executors.newFixedThreadPool(nThreads):创建固定大小的线程池。

Executors.newSingleThreadExecutor():创建单个线程的线程池

public ThreadPoolExecutor(int corePoolSize,

int maximumPoolSize,

long keepAliveTime,

TimeUnit unit,

BlockingQueue<Runnable> workQueue) {

this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,

Executors.defaultThreadFactory(), defaultHandler);

}

这几个核心参数的作用:

corePoolSize 为线程池的基本大小。

maximumPoolSize 为线程池最大线程大小。

keepAliveTime 和 unit 则是线程空闲后的存活时间。

workQueue 用于存放任务的阻塞队列。

handler 当队列和最大线程池都满了之后的饱和策略

关闭线程池:

有运行任务自然也有关闭任务,从上文提到的 5 个状态就能看出如何来关闭线程池。

方法: shutdown()和shutdownNow()。

但他们有着重要的区别:

shutdown() 执行后停止接受新任务,会把队列的任务执行完毕。

shutdownNow() 也是停止接受新任务,但会中断所有的任务,将线程池状态变为 stop。

原文地址:https://www.cnblogs.com/wnlsq/p/12163712.html

时间: 2024-10-13 20:46:40

使用和理解线程池的相关文章

Java核心(二)深入理解线程池ThreadPool

本文你将获得以下信息: 线程池源码解读 线程池执行流程分析 带返回值的线程池实现 延迟线程池实现 为了方便读者理解,本文会由浅入深,先从线程池的使用开始再延伸到源码解读和源码分析等高级内容,读者可根据自己的情况自主选择阅读顺序和需要了解的章节. 一.线程池优点 线程池能够更加充分的利用CPU.内存.网络.IO等系统资源,线程池的主要作用如下: 利用线程池可以复用线程,控制最大并发数: 实现任务缓存策略和拒绝机制: 实现延迟执行 阿里巴巴Java开发手册强制规定:线程资源必须通过线程池提供,如下图

深入理解线程池(转)

原作者:海子 出处:http://www.cnblogs.com/dolphin0520/    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间. 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果.今天我们就来详

线程小酌之理解线程池

一.引言 在学习JAVASE部分中,我们都学习到了基本的线程创建继承THREAD类或实现Runnable接口,在正常负载情况下,为每个任务分配一个线程这种方法能够提升串行执行的性能.只要请求的导弹速率不超出服务器的请求处理能力,那么这种方法可以同时带来更快的响应性和更高的吞吐率.但是在实际开发过程中,开发环境和测试环境因数据流量并没有达到实际请求流量,并不能发现实际的问题,在生产环境中,为每个任务分配一个线程这种方法存在一些缺陷,尤其是当需要创建大量的线程时: 1.线程的生命周期的开销非常高 线

【转】Java学习---深入理解线程池

[原文]https://www.toutiao.com/i6566022142666736131/ 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间. 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果.今天我们就来详细讲解一下Ja

理解线程池,自己实现一个线程池

线程池本质是一个生产者-消费者模式,一边维护一些线程执行任务,一边由主线程添加一些任务.现在我们抛弃源码中一些繁杂的状态判断,自己写一个线程池. public class poolT { //可能频繁增删任务,链表队列效率较高 private final BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(); private final HashSet<Work> workers

Java多线程高并发学习笔记(三)——深入理解线程池

线程池最核心的一个类:ThreadPoolExecutor. 看一下该类的构造器: public ThreadPoolExecutor(int paramInt1, int paramInt2, long paramLong, TimeUnit paramTimeUnit, BlockingQueue<Runnable> paramBlockingQueue) { this(paramInt1, paramInt2, paramLong, paramTimeUnit, paramBlockin

如何使用加拿大28源码下载理解线程池

平时接触过加拿大28源码下载[dashengba.com]Q3266397597多线程开发的童鞋应该都或多或少了解过线程池,之前发布的<阿里巴巴 Java 手册>里也有一条:可见线程池的重要性.简单来说使用线程池有以下几个目的:线程是稀缺资源,不能频繁的创建.解耦作用:线程的创建于执行完全分开,方便维护.应当将其放入一个池子中,可以给其他任务进行复用.线程池原理谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中:每次使用都从里面获取,用完之后又放回池子供其他人使用,有点

如何优雅的使用和理解线程池

前言 平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的<阿里巴巴 Java 手册>里也有一条: 可见线程池的重要性. 简单来说使用线程池有以下几个目的: 线程是稀缺资源,不能频繁的创建. 解耦作用:线程的创建于执行完全分开,方便维护. 应当将其放入一个池子中,可以给其他任务进行复用. 线程池原理 谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中:每次使用都从里面获取,用完之后又放回池子供其他人使用,有点吃大锅饭的意思. 那在 Java 中又是如何实现的

如何优雅的使用和理解线程池----转

线程池原理 谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中:每次使用都从里面获取,用完之后又放回池子供其他人使用,有点吃大锅饭的意思. 那在 Java 中又是如何实现的呢? 在 JDK 1.5 之后推出了相关的 api,常见的创建线程池方式有以下几种: Executors.newCachedThreadPool():无限线程池. Executors.newFixedThreadPool(nThreads):创建固定大小的线程池. Executors.newSingle