线程状态:

线程共包括以下5种状态。

1. 新建状态(New)线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。

2. 就绪状态(Runnable)也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。

例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。

3. 运行状态(Running)线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。

4. 阻塞状态(Blocked)阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

(01) 等待阻塞 -- 通过调用线程的wait()方法,让线程等待某工作的完成。

(02) 同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。

(03) 其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。

当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

5. 死亡状态(Dead)线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

线程池状态:

1. RUNNING

(01) 状态说明:线程池处在RUNNING状态时,能够接收新任务,以及对已添加的任务进行处理。

(02) 状态切换:线程池的初始化状态是RUNNING。换句话说,线程池被一旦被创建,就处于RUNNING状态!

道理很简单,在ctl的初始化代码中(如下),就将它初始化为RUNNING状态,并且"任务数量"初始化为0。

private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));

2. SHUTDOWN

(01) 状态说明:线程池处在SHUTDOWN状态时,不接收新任务,但能处理已添加的任务。

(02) 状态切换:调用线程池的shutdown()接口时,线程池由RUNNING -> SHUTDOWN。

3. STOP

(01) 状态说明:线程池处在STOP状态时,不接收新任务,不处理已添加的任务,并且会中断正在处理的任务。

(02) 状态切换:调用线程池的shutdownNow()接口时,线程池由(RUNNING or SHUTDOWN ) -> STOP。

4. TIDYING

(01) 状态说明:当所有的任务已终止,ctl记录的"任务数量"为0,线程池会变为TIDYING状态。当线程池变为TIDYING状态时,会执行钩子函数terminated()。terminated()在ThreadPoolExecutor类中是空的,若用户想在线程池变为TIDYING时,进行相应的处理;可以通过重载terminated()函数来实现。

(02) 状态切换:当线程池在SHUTDOWN状态下,阻塞队列为空并且线程池中执行的任务也为空时,就会由 SHUTDOWN -> TIDYING。

当线程池在STOP状态下,线程池中执行的任务为空时,就会由STOP -> TIDYING。

5. TERMINATED

(01) 状态说明:线程池彻底终止,就变成TERMINATED状态。

(02) 状态切换:线程池处在TIDYING状态时,执行完terminated()之后,就会由 TIDYING -> TERMINATED。

java 线程池 状态_【Java多线程】线程状态、线程池状态相关推荐

  1. 用java线程绘制图案_关于多线程:使用线程在java中绘制面板

    我正在编写一个包含许多不同视图的程序. 其中一个是相当图形密集型(它显示一个互连的图形). 其他人只是展示小而复杂的图表. 我发现主视图的绘制时间很长(甚至只绘制当前可见的区域),并且在绘制时,界面的 ...

  2. JAVA音程_关于多线程中的线程调度问题

    常见的线程调度模型有哪些? 抢占式调度模型: 那个线程的优先级比较高,抢到的CPU时间片的概率就高一些/多一些. java采用的就是抢占式调度模型 均分式调度模型: 平均分配CPU时间片.每个线程占有 ...

  3. java线程实现排序_【多线程实现快速排序】

    快速排序算法实现文件QuickSort.java package quick.sort; import java.util.concurrent.Callable; import java.util. ...

  4. java线程下载文件_使用多线程在Java下载文件

    我正在做一个类似IDM的下载器,我已经读到了这篇关于它的文章.我已经实现了我的第一步代码. 下面是Downloader类的代码:package download.manager; import jav ...

  5. java 线程访问控件_C#多线程与跨线程访问界面控件的方法

    本文实例讲述了C#多线程与跨线程访问界面控件的方法.分享给大家供大家参考.具体分析如下: 在编写WinForm访问WebService时,常会遇到因为网络延迟造成界面卡死的现象.启用新线程去访问Web ...

  6. 获取返回值作为变量_解决多线程间共享变量线程安全问题的大杀器——ThreadLocal...

    微信公众号:Zhongger 我是Zhongger,一个在互联网行业摸鱼写代码的打工人! 关注我,了解更多你不知道的[Java后端]打工技巧.职场经验等- 上一期,讲到了关于线程死锁.用户进程.用户线 ...

  7. java 基础面试 英文_[Java面试] 面试java基础总结大全

    原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...

  8. java中的原子操作_[Java并发系列] 2.Java中的原子操作类

    1. 原子操作类的作用 当程序更新一个变量时,如果多个线程同时更新该变量,可能会得到期望以外的值.比如i=1, 线程A更新i+1, 同时线程B更新I+1,经过两个线程的操作,最终变量i的值可能不是3, ...

  9. Java并发编程实战_[Java并发编程实战] 简介

    并发简史 在早期不包含操作系统的计算机中,程序都是单一的串行程序,从头至尾只能执行一个程序,并且这个程序访问这个计算机的所有资源.然而,随着技术的发展,操作系统出现了.它使得计算机程序有了进程,线程的 ...

  10. java教程孙鑫_[Java基础] 孙鑫老师JAVA无难事视频教程 最适合java入门学习打基础的课程 附源码...

    资源介绍 课程介绍 由孙鑫老师亲自授课录制.内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,学员通过本套光盘的学习,能够快速掌握Java编程语言,成为Java高手. 由孙鑫老师亲自授课录制 ...

最新文章

  1. swift 实践- 10 -- UIProgressView
  2. How to test function module CRM_TERRMAN_BUILD_TERRATTRIB_B
  3. [PAT乙级]1029 旧键盘
  4. 学习SharePoint记录,微软给出的的Application Templates很有帮助呢
  5. arm linux演艺(三)
  6. Oracle SUn
  7. 极限学习机(Extreme Learning Machine, ELM)原理详解和MATLAB实现
  8. 提取 Wallpaper Engine 的 pkg 壁纸文件,获得静态壁纸
  9. 关于java一些星号三角形的实现
  10. Object.defineProperty是Es5中无法shim的特性 shim是什么?
  11. ReactNative中国省-市-区WheelPicker组件
  12. Docker网络管理
  13. 安装tensorflow出现 Cannot uninstall 'wrapt'. It is a distutils installed project and thus we cannot accu
  14. SQL Server学习笔记6——LTRIM()函数(去掉空格)
  15. Linux系统的时区时间设置
  16. chatgpt-mirai-qq-bot
  17. User Exit for MIGO after SAVE
  18. 动网8.3 整合 个人网站
  19. 视觉机器人+人体姿态识别项目总结
  20. 去哪儿旅行携程旅行淘宝旅行移动端产品分析报告

热门文章

  1. 委派模式的定义及应用场景
  2. 【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
  3. 配置Swagger2
  4. SpringBoot_web开发-thymeleaf语法
  5. 为什么要用dubbo,dubbo和zookeeper关系
  6. 如何实现一个java窗口_如何实现多个弹出窗口?
  7. java 直播服务器_MyLive--使用JAVA实现的直播RTMP服务器
  8. Xshell、Xftp入门使用
  9. 阿里专家分享:企业级大数据轻量云实践
  10. 《数据结构与抽象:Java语言描述(原书第4版)》一练习