首页 > 编程语言 >【java基础】线程池的状态流转

【java基础】线程池的状态流转

时间:2024-06-12 23:21:47浏览次数:22  
标签:java 对象 流转 任务 线程 ctl 窗口

前言:

首先要知道什么是线程池?

池化:数据库连接池, 线程池,字符串常量池

线程是用来执行任务的,

如果不用线程池,那么线程每次使用前创建,使用后释放,资源利用率低。所以说用线程池提高了线程对象利用率。

所以可以用线程池完成,先创建好那么多个线程对象在那等着,类比银行客户等待窗口办理业务。默认开放3个窗口(核心线程数),等待人多,就要增开窗口,渐渐增大到最大(最大线程数)。如果一个窗口长时间没有顾客来办理(线程对象在存活时间内没有接到任务,则销毁该线程)。阻塞队列的长度可类比客户等待区,也就是说当并发任务数超过了(最大线程数+

阻塞队列长度)则根据拒绝策略拒绝新任务。所以说线程池能控制并发数量。

线程池用线程工厂去创建线程对象。

代码:自定义一个线程池。

 

正文:

线程池有这五种状态:Running,Shutdown,Stop,Tyding,Terminate

我们就可以重写terminate方法去完成一些环境清理等工作。

图侵删,源:https://www.bilibili.com/video/BV1QM4m1d7JY?p=5&vd_source=756399be2f5d306a68f761927effd974 个人记录用。

 

tryTerminate()

 这里用的ctl 保持原子性,AtomicInteger有32个比特位,四个字节,ctl高3位存储线程池状态,低29位当前线程池线程数量。

 

标签:java,对象,流转,任务,线程,ctl,窗口
From: https://www.cnblogs.com/jin-wen-xin/p/18244932

相关文章

  • JavaScript获取表单数据转换时间格式(学习自用)
    JavaScript获取表单数据转换时间格式:getTime(date){letdateNow=newDate(date);functionconvert(data){//时间为个位数时,前面加个0,使观感更好returndata<10?"0"+data:data;}letyear......
  • 【java基础】java线程的四种创建方式
    1.继承Thread类 2.实现Runnable接口 因为Runnable接口就是支持函数式编程的接口,可以这么玩 3.实现Callable接口,用FutureTask<T>获取返回值。FutureTask还是继承的Runnable接口   4.创建线程池Executors。由于Executors提供的等待队列LinkedBlockingQ是无界......
  • java 堆外内存排查
    操作系统:centos7jdk版本8yum-yinstallgccgcc-c++wgethttp://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gzwgethttps://github.com/gperftools/gperftools/releases/download/gperftools-2.6.1/gperftools-2.6.1.tar.gz./configure--prefix=/u......
  • 线程池 (重点)概述&7大参数理解
    目录1、线程池思想概述2、什么是线程池?3、不使用线程池的问题4、线程池的工作原理5、线程池实现的API、参数说明 5.1、谁代表线程池? 5.2、如何得到线程池对象 5.3、ThreadPoolExecutor构造器的参数说明 6、线程池常见面试题 6.1、临时线程什么时候创建啊? 6.2......
  • 黑马20天java-1/2天
    1.计算机中存储数据的单位是字节(byte),每个字节是由8位(bit)组成。2.人机交互方式:图形化界面(消耗内存+运行速度慢)+命令行3.常用的dos命令4.Path环境变量:可以理解为系统中的一个大管家,帮我们记录了很多软件的完整路径当我们要运行一个程序,而没有告诉它程序所在的完整路径......
  • 线程池的使用:批量导入、数据汇总、异步保存搜索记录
    文章目录1、场景一:MySQL批量导入数据到ES1.1CountDownLatch1.2流程图1.3代码实现1.4效果2、场景二:数据汇总2.1流程图2.2代码实现3、场景三:异步调用3.1需求3.2代码实现1、场景一:MySQL批量导入数据到ES场景:需要将库里的1000万左右的数据量,导入到ES索引库中......
  • GATK不能多线程的问题
    问题:申请了多线程但是只能单线程 17:13:48.941INFOIntelPairHmm-Availablethreads:117:13:48.941INFOIntelPairHmm-Requestedthreads:417:13:48.941WARNIntelPairHmm-Using1availablethreads,but4wererequested 解决方法:exportOMP_N......
  • 【java问答小知识8】一些Java基础的知识,用于想学习Java的小伙伴们建立一些简单的认知
    Java中的"java.util.IdentityHashMap"如何比较键?回答:"java.util.IdentityHashMap"使用==操作符来比较键,即它比较的是引用身份。Java中的"java.util.EventListener"接口有什么作用?回答:"java.util.EventListener"接口是所有事件监听器接口的基接口,用于定义事件处理方法......
  • 探索Java并发容器的深坑与妙用:从同步到并发的进化之路
    探索Java并发容器的深坑与妙用:从同步到并发的进化之路在Java的世界里,并发编程一直是一个复杂而又充满挑战的领域。尤其是在处理并发容器时,不同版本、不同类型的容器带来的种种问题和优化,更是让人眼花缭乱。今天,我们将深入探讨Java并发容器的演化历程,揭示其中的深坑与妙用,帮......
  • 线程池
    从上图可以看到,线程被创建出来之后,都处于睡眠态,它们实际上是进入了条件量的等待队列中。而任务都被放入一个链表,被互斥锁保护起来。下面是线程池里面线程们的一生:\1.被创建\2.写遗书(准备好退出处理函数,防止在持有一把锁的状态中死去)\3.试图持有互斥锁(等待任务)\4.判断是......