java线程池学习(二)

new Thread 弊端:

1、每次new Thread 新建对象,性能差

2、线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多的系统资源导致死机或者OOM

3、缺少更多的功能,如更多执行、线程中断等

线程池--ThreadPoolExecutor

corePoolSize: 核心线程数量

maxinumPool: 线程最大线程数

workqueue: 阻塞队列,存储等待执行的任务,很重要,对线程池产生重大的影响 。

keepaliveTime: 线程没有任务执行时,最多保持多久时间终止 。

unit: keepalivetime 的时间单位

threadFactory: 线程工厂,用来创建线程池使用的 。

rejectHeader: 当拒绝处理任务时的策略

线程池的几个状态:

1、 running : 接受新提交的任务,也能处理阻塞队列中的任务

2、shutdown: 不能接受新提交的任务,但是可以处理线程池中正在等待的任务

3、stop: 不能接受新提交的任务,也不能处理阻塞队列的任务

4、tidying : 如果所有的任务都终止了,有效线程数为0 ,线程池会进入到该状态

execuor: 提交任务,交给线程池执行

submit : 提交任务,能够返回执行结果

shutdown: 关闭线程池,等待所有的任务执行完

shotdownnow: 关闭线程池,不等待所有的任务执行完

gettaskcount : 获取已经执行和还没有执行的任务

getcompletedTaskCount(): 获取已经执行完成的线程数量

getpoolsize: 线程池当前的线程数量

getactivecount: 当前线程池中正在执行的线程数量

Executors.newCacheThreadPool : 创建一个可缓存的线程池,可以动态的扩展内存大小,并将使用完的内存资源进行回收

Executors.newFixedPool : 创建一个定长的线程池 ,可控制线程的最大并发数,超出的线程在队列中等待

Executors.newScheduledThreadpool: 创建的已是一个订场的线程池,可以做到定时和周期性的执行任务。

Executors.newSingleThreadExecutor: 单线程的线程池,所有的任务只能按照固定的顺序去执行

线程池的合理配置:

1、 CPU密集型任务,需要尽量压榨CPU的资源,参考值可以设置为NCPU+1

2、IO密集型的任务,参考值可以设置为2*NCPU

原文地址:https://www.cnblogs.com/wcgstudy/p/11509804.html

时间: 2024-10-02 02:16:20

java线程池学习(二)的相关文章

Java 线程池学习

Reference: <创建Java线程池>[1],<Java线程:新特征-线程池>[2], <Java线程池学习>[3],<线程池ThreadPoolExecutor使用简介>[4],<Java5中的线程池实例讲解>[5],<ThreadPoolExecutor使用和思考>[6] [1]中博主自己通过ThreadGroup实现一个线程池(挺方便理解的),使用的是jdk1.4版本,Jdk1.5版本以上提供了现成的线程池. [2]中介绍

Java线程池学习

一.实现Java多线程的方法 1.继承Thread类创建多线程 Thread类本质实现了Runnable接口.启动线程为start0()方法.是个native方法. 1 public class ThreadProcess extends Thread { 2 3 @Override 4 public void run(){ 5 long lastTime = System.currentTimeMillis(); 6 for(int i = 0; i < 1; i++){ 7 int ele

Java线程池学习总结

一 使用线程池的好处 池化技术相比大家已经屡见不鲜了,线程池.数据库连接池.Http 连接池等等都是对这个思想的应用.池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率. 线程池提供了一种限制和管理资源(包括执行一个任务). 每个线程池还维护一些基本统计信息,例如已完成任务的数量. 这里借用<Java 并发编程的艺术>提到的来说一下使用线程池的好处: 降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 提高响应速度.当任务到达时,任务可以不需要的等到线程创建就

java线程池学习(一)

前言 在实际工作中,线程是一个我们经常要打交道的角色,它可以帮我们灵活利用资源,提升程序运行效率.但是我们今天不是探讨线程!我们今天来聊聊另一个与线程息息相关的角色:线程池.本篇文章的目的就是全方位的解析线程池的作用,以及jdk中的接口,实现以及原理,另外对于某些重要概念,将从源码的角度探讨. tip:本文较长,建议先码后看. 线程池介绍 首先我们看一段创建线程并且运行的常用代码: for (int i = 0; i < 100; i++) { new Thread(() -> { Syste

java线程池的学习

package advancedJava;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit; * java 线程池学习 * @author: cuiH * Date: 13-12-7public class ThreadPoolTest { * 线程池的概念 * jdk5提出了ThreadPool的概念 * 之

JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue .

从Java5开始,Java提供了自己的线程池.每次只执行指定数量的线程,java.util.concurrent.ThreadPoolExecutor 就是这样的线程池.以下是我的学习过程. 首先是构造函数签名如下: [java] view plain copy print ? public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<

Java线程池详解(二)

一.前言 在总结了线程池的一些原理及实现细节之后,产出了一篇文章:Java线程池详解(一),后面的(一)是在本文出现之后加上的,而本文就成了(二).因为在写完第一篇关于java线程池的文章之后,越发觉得还有太多内容需要补充,每次都是修修补补,总觉得还缺点什么.在第一篇中,我着重描述了java线程池的原理以及它的实现,主要的点在于它是如何工作的.而本文的内容将更为上层,重点在于如何应用java线程池,算是对第一篇文章的一点补充,这样对于java线程池的学习和总结稍微完整一些. 使用过java线程池

Java深入学习13:Java线程池

Java深入学习13:Java线程池 一.线程池的作用 线程池提供一个线程队列,队列中保存着所有等待状态的线程.避免了创建与销毁等额外开销,提交了响应的速度. 二.类关系 Java线程池相关的接口和类均在 java.util.concurrent 包下,其相关关系(部分)如下 三.Executors类以及相关常用方法介绍 1-Executors类简介:简单的说是线程方法的工具类,提供了 创建线程池等方法. 2-ExecutorService 类创建线程池 //创建缓存线程池,线程数量不固定,可以

Java线程池使用和分析(二) - execute()原理

相关文章目录: Java线程池使用和分析(一) Java线程池使用和分析(二) - execute()原理 execute()是 java.util.concurrent.Executor接口中唯一的方法,JDK注释中的描述是“在未来的某一时刻执行命令command”,即向线程池中提交任务,在未来某个时刻执行,提交的任务必须实现Runnable接口,该提交方式不能获取返回值.下面是对execute()方法内部原理的分析,分析前先简单介绍线程池有哪些状态,在一系列执行过程中涉及线程池状态相关的判断