一.newfixedthreadpool(优秀线程池)
目的:线程池中的最大线程数规定了创建线程数的最大数量
优点:规定了最大线程数,减少了线程过多切换的开销;减少了创建线程和销毁线程的开销,提高了性能。
缺点:核心线程中的线程空闲时回占用资源

线程池的核心类:Threadpoolexector
线程池中的核心组件:
1.阻塞队列
2.核心线程数
工作流程:
当线程数没到和核心线程数的大小时,新的任务就会创建新的新的线程;当线程数达到核心线程数大小时,就会看核心线程里面有没有空闲线程,如果有就直接使用空闲线程,否则放到阻塞队列中,当有空闲线程,再把任务从阻塞队列中取出。当核心线程没有空闲并且阻塞队列满了时也会创建新线程,不过此时的线程就不在核心线程里面了,如果总线程数超过最大线程数默认就会丢掉任务并且抛出异常。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
二CachedThreadPool(缓存线程池)
最大容量为Interger.MAX_VALUE)
工作过程:
当有新任务就创建新线程,空闲时间超过1分钟就销毁线程,优点是空闲的线程不会占用系统资源,缺点是会有创建和销毁线程的开销;另外因为Integet.max(),可允许创建的线程数太大,高并发会创建很多线程,容易导致内存溢出。

JDK自带线程池总类:

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

2、newCachedThreadPool创建一个可缓存的线程池。这种类型的线程池特点是:

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

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

3、newSingleThreadExecutor创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它,保证顺序执行(我觉得这点是它的特色)。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。

4、newScheduleThreadPool创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于Timer。(这种线程池原理暂还没完全

了解透彻)

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

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

线程池的原理开始初始化若干线程处于休眠状态等待调用,不用频繁创建销毁减少cpu开支,提升部分性能。
实现简单的线程池:
在这里插入图片描述

在这里插入图片描述
拒绝策略是可以配置的,默认是丢掉任务并且抛出异常。

一.newfixedthreadpool(优秀线程池)目的:线程池中的最大线程数规定了创建线程数的最大数量优点:减少了创建线程和销毁线程的开销,提高了性能。缺点:核心线程中的线程空闲时回占用资源线程池的核心类:Threadpoolexector线程池中的核心组件:1.阻塞队列2.核心线程数工作流程:当线程数没到和核心线程数的大小时,新的任务就会创建新的新的线程;当线程数达到核心线程数大小时,就会看核心线程里面有没有空闲线程,如果有就直接使用空闲线程,否则放到阻塞队列中,当有空闲线程,再把任 线程池 介绍 线程池 ,顾名思义就是一个线程缓存,线程是稀缺 资源 ,如果被无限制的创建,不仅会消耗系统 资源 ,还会降低系统的稳定性,因此 Java 中提供 线程池 对线程进行统一分配、调优和监控 作用: 线程池 做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。 线程复用。减少线程创建,消亡的开销,提高性能; 提高响应速度。当任务到达时,任务可以不需要 我们创建一个线程执行任务后线程死亡.如果线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 比如:中午吃完饭将碗洗干净,晚上接着使用 重复利用,可以节... 线程池 、JDBC的连接池、内存池、对象池 等等。。。。 资源 的创建、销毁十分消耗 资源 池化技术:事先准备好一些 资源 ,如果有人要用,就来我这里拿,用完之后还给我,以此来提高效率。 线程池 的好处: 1、降低 资源 的消耗; 2、提高响应的速度; 3、方便管理; 线程复用、可以控制最大并发数、管理线程 1 线程池 :三大方法 ExecutorService threadPo
在解决之前,首先需要思考一个问题, 线程池 存在的原因是什么呢 在实际使用中,线程是很 占用 系统 资源 的,如果对线程管理不善 很容易导致系统问题。因此,在大多数并发框架中都会使用线程 池来管理线程,使用 线程池 管理线程主要有如下好处: 使用 线程池 可以重复利用已有的线程继续执行任务,避免线程在创建和销毁时造成的消耗 由于没有线程创建和销毁时的消耗,可以提高系统响应速度 通过线程可以对线程进行合理的管理,根据系统的承受能力调整可运行线程数量的大小等 一、 线程池 分析 1、工作原理 线程池 执行所提交的任务过程: 首先单线程》》》》》》 创建一个1000的循环,里面第一次用单线程跑,一共用时(开始时间:::1619514363141 结束时间1619514364419 共用时:1278毫秒) package com.hansight.atom.custom.webMonitor; import java .text.SimpleDateFormat; import java .util.Date; import java .util.concurrent.Executors; import...
线程 资源 占用 ,和cpu被这个线程 占用 是有区别的 1.线程 资源 占用 ,是指线程中的 这些操作(指令)一直没执行完,那线程就不能 去更新执行(即存其他操作的指令),就会导致 其他操作 没有线程存,而不能执行 2.而 线程 资源 占用 ,不代表cpu一直被这个 线程 占用 ,只有这个线程的 某个操作 是原子性的,才会 占用 这个cpu 3. cpu被 这个线程 占用 ,比 线程 资源 得不到释放 严重的 多,线程 资源 得不到释放 只是 说 用来存其他指令的
public class Demo1 { public static void main(String[] args) throws InterruptedException { List<String> list = Collections.synchronizedList(new ArrayList<>()); for (int ...
降低 资源 消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺 资源 ,如果无限制的创建,不仅会消耗系统 资源 ,还会降低系统的稳定性,使用 线程池 可以进行统一的分配,调优和监控。 二、 java 中提供的 线程池 Executors.newSingleThreadExecutor 创建一个单线程的 线程池 ,只有一条线程
一、故事讲解 有一家月饼店开业了,店里面有3个核心员工,这些人负责月饼的制作,3人同时工作制作100个月饼,每个人做完自己的月饼就会忙着下一个月饼的制作。因为总不可能要100个员工来做这些月饼吧,那也太浪费了。这些月饼的制作顺序是按照先后排队等待被制作的。 中秋佳节来临了,这些月饼的单子一下子赶了起来。忙不过来那就只能请一些临时员工来帮忙,但是核心员工忙得过来就用不上临时员工了。同时根据这些核心员工和临时员工的工作能力来判断接单情况,超过工作情况就不接单了,等先忙完这些再说。忙完这些月饼的制做