`

JAVA线程池原理以及常用线程池介绍

阅读更多

什么原因使我们不得不使用线程池?

个人认为主要原因是:短时间内需要处理的任务数量很多。

使用线程池的好处:

1.减少在创建和销毁线程上所花的时间以及系统资源的开销 
2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存

以下是Java自带的几种线程池:

1、newFixedThreadPool  创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。 2、newCachedThreadPool 创建一个可缓存的线程池。

这种类型的线程池特点是: 
1).工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。 

2).如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。

 

3、newSingleThreadExecutor 创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它,保证顺序执行(我觉得这点是它的特色)

 

单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的 。

4、newScheduleThreadPool  创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于Timer。

 

 

总结: 

 

一.FixedThreadPool是一个典型且优秀的线程池,它具有线程池提高程序效率和节省创建线程时所耗的开销的优点。但在线程池空闲时,即线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源。 

二.CachedThreadPool的特点就是在线程池空闲时,即线程池中没有可运行任务时,它会释放工作线程,从而释放工作线程所占用的资源。但是,但当出现新任务时,又要创建一新的工作线程,又要一定的系统开销。并且,在使用CachedThreadPool时,一定要注意控制任务的数量,否则,由于大量线程同时运行,很有会造成系统瘫痪。

 

 

 

 

 

分享到:
评论

相关推荐

    Java常用线程池原理及使用方法解析

    主要介绍了Java常用线程池原理及使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java并发包&线程池原理分析&锁的深度化

    1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中...

    基于Java线程池技术实现Knock Knock游戏项目.zip

    项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习...

    11-线程池ThreadPoolExecutor底层原理源码分析(上)-周瑜.pdf

    11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...

    12-线程池ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf

    11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...

    Android多线程:完全解析线程池ThreadPool原理&使用

    具体设置时机=创建线程池类对象时传入ThreadPoolExecutor类=线程池的真正实现类开发者可根据不同需求配置核心参数,从而实现自定义线程池注:Java里已内置4种常用的线程池(即已经配置好核心参数),下面会详细说明...

    13、线程池ForkJoinPool实战及其工作原理分析(1).pdf

    11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...

    java面试大全视频版

    Java面试题02.java的垮平台原理 Java面试题03.搭建一个java的开发环境 Java面试题04.java中int占几个字节 Java面试题05.java面向对象的特征 Java面试题06.装箱和拆箱 Java面试题07.==和equals的区别 Java面试题08....

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题02.java的垮平台原理.mp4 │ Java面试题03.搭建一个java的开发环境.mp4 │ Java面试题04.java中int占几个字节.mp4 │ Java面试题05.java面向对象的特征.mp4 │ Java面试题06.装箱和拆箱.mp4 │ Java...

    Java基础知识点总结.docx

    无论是工作学习,不断的总结是必不可少的。只有不断的总结,发现问题,弥补不足,才能长久的...java.util.concurrent.locks包下常用的类 326 NIO(New IO) 327 volatile详解 337 Java 8新特性 347 Java 性能优化 362

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    Java面试题02.java的垮平台原理 Java面试题03.搭建一个java的开发环境 Java面试题04.java中int占几个字节 Java面试题05.java面向对象的特征 Java面试题06.装箱和拆箱 Java面试题07.==和equals的区别 Java面试题08....

    Java Core Sprout:基础、并发、算法

    Java Core Sprout:一个萌芽阶段的Java核心知识库。 访问这里获得更好的阅读体验:https://crossoverjie.top/JCSprout/ 常用集合 数组列表/向量 链表 哈希映射 哈希集 链接哈希映射 Java多线程 多线程中的常见问题 ...

    java面试题.docx

    企业常见java面试题,java基础,java进阶 JDK 和 JRE 有什么区别? == 和 equals 的区别是什么? 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? final 在 java 中有什么作用? java 中操作字符串...

    Java-Interview:此项目为 Java 面试的汇总,多数是一些 Java 基础知识、底层原理、算法详解。也有上层应用设计,其中不乏一些大厂面试真题

    线程池原理 深入理解线程通信 交替打印奇偶数 JVM Java 运行时内存划分 类加载机制 OOM 分析 垃圾回收 对象的创建与内存分配 你应该知道的 volatile 关键字 分布式相关 分布式限流 基于 Redis 的分布式锁 分布式缓存...

    Java学习指南,涵盖大部分Java程序员所需要掌握的核心知识

    学习路线、Java基础核心串讲、Java基础知识 计算机操作系统 IO Linux 计算机网络 HTTP/HTTPS TCP/IP 7种常见的设计模式和使用场景 Java必会基础与新版本特性 集合框架 JVM内存模型 性能调优、线上问题排查 类加载...

    【Java面试+Java学习指南】一部分大部分Java招聘所需要掌握的核心知识

    Git原理与工作流程 Linux常用分析工具 数据结构与算法 从二叉搜索树到B+树 经典问题之字符串 经典问题之TOPK 最大公共子串 动态规划 大厂面试爱问的「调度算法」,20张图一举拿下 图解红黑树 面试必备 | 不可能的...

    Java常见面试题208道.docx

    面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql...

    java8源码-java_architect:java_架构师

    常用的线程池模式以及不同线程池的使用场景 newFixedThreadPool此种线程池如果线程数达到最大值后会怎么办,底层原理。 多线程之间通信的同步问题,synchronized锁的是对象,衍伸出和synchronized相关很多的具体问题...

    Java-Interview:https

    线程池原理 深入理解线程通信 交替打印奇偶数 JVM Java 运行时内存划分 类加载机制 OOM 分析 垃圾回收 对象的创建与内存分配 你应该知道的 volatile 关键字 分布式相关 分布式限流 基于 Redis 的分布式锁 分布式缓存...

    疯狂JAVA讲义

    5.4.4 Java的常用包 140 5.5 深入构造器 140 5.5.1 使用构造器执行初始化 141 学生提问:构造器是创建Java对象的途径,是不是说构造器完全负责创建Java对象? 141 5.5.2 构造器的重载 142 学生提问:为什么要用...

Global site tag (gtag.js) - Google Analytics