Java thread state and switch

Irving the procedural ape 2020-11-11 10:10:17
java thread state switch

Java Thread state and switch

One 、 What is? Java Thread state

stay Java In the program , Used to describe Java Six states of thread :

  • newly build (NEW): Current thread , It's just been built , Not yet started .
  • function (RUNNABLE): Current thread , In competition CPU Time sliced or acquired CPU The state of the time slice .
  • wait for (WAITTING): Current thread , In dormancy , No participation CPU The state of time slice competition .
  • Wait regularly (TIMED_WAITTING): Current thread , In a timed sleep , Don't take part in CPU The state of time slice competition .
  • Blocking (BLOCKED): Current thread , It's in a jam , No participation CPU The state of time slice competition .
  • End (TERMINATED): Current thread , In a state of final cessation .

New state , Can only enter the running state . The termination state cannot be changed to any other state .

wait for / Timed waiting and blocking , The difference is that the latter requires an event signal ( If other threads abandon the exclusive lock required by the current thread ), Before you can switch state . Of course , It's OK to force closure .

Java Thread implementation is not subject to JVM Normative constraints , So the implementation of different virtual machines , It's often different . At present, the mainstream HotSpot It's going to be every Java Threads are mapped directly to native threads of an operating system , Thus, the operating system completes a series of thread scheduling

Two 、 Where to see Java Thread state

see Java Thread state , There are three main ways :

  • java.lang.Thread.State You can directly see Java Six thread states of
  • Java Runtime , Inside the program, you can use Thread.getState() Get target thread status
  • Java Runtime , Outside the program, you can use jstack Tools such as , View thread status

of jstack Wait for tools to use , There will be blogs later , To elaborate on .

3、 ... and 、 When to change Java Thread state

Java Thread state switching . No verbosity , Directly above .
 Insert picture description here
This picture covers Java Various methods of thread state switching . Compared with some pictures on the Internet , More detailed .
If something is missing , Can tell me , I'll fill it in time .

Four 、 Who is using Java Thread state

Daily development , We don't interact directly with thread state .
We often use JDK Packaged tools , Such as JUC All kinds of tools under the bag .

Take a chestnut

Application in thread pool


 // Note that this method should not return until AFTER all threads have died. public void close() throws IOException { // Copy to avoid concurrent modification problems. List<WorkerThread> copy = null; synchronized (workersLock) { copy = new ArrayList<>(workers); } for (WorkerThread wt : copy) { wt.close(); while (wt.getState() != Thread.State.TERMINATED) { try { wt.join(); } catch (InterruptedException exc) { wrapper.interruptedJoinCallWhileClosingThreadPool(exc, wt, this); } } } threadGroup = null; }

Actually check JDK After the discovery ,JDK In fact, there are not so many examples of spicy , And most of them are directly related to the thread state , It's also something about status checking .
This is said at the beginning of the article ,Java Thread operation , It's very low-level , Even the implementation is not included in the virtual machine specification .
Mainstream HotSpot, It's also a direct way to Java Threads map to system threads , By the system to carry out a series of thread scheduling processing .
therefore , stay JDK in , There is little direct processing of the state of the thread .

5、 ... and 、 Why thread state is needed

1. Why the concept of thread state is needed

This problem , It can be explained from two aspects : Life cycle and resource management

  • One side , Thread state is a good description of the whole life cycle of a thread , The different stages in the life cycle are divided effectively .
  • On the other hand , Resources are limited , The demand is infinite . So we need to schedule the system resources consciously , Make rational use of comparative advantages , The pursuit of Pareto optimality .

Realize the latter , It is the use of thread in the different stages of the life cycle of this natural attribute of the description of state , The grouping that was carried out .CPU Scheduling only needs to focus on the running state of the thread . And jam , Wait for threads , They all have their own way of handling . Finally get the resources ( Development response to complexity , The runtime consumes system resources , The growth of the user's mental model, etc ) The optimal allocation of .

2.JDK Why do we need to define Java Thread state

I said before ,Java Thread state is rarely used directly in . So why are you still in JDK In the definition of Java The six thread states of ?
One side , Through information transparency , Reduce the cost of building mental models for users . Such as , Now we can print logs , Breaking point , Quickly understand Java State of each thread of , And have a clear understanding of the causes . This greatly improves our understanding of Java Understanding of threads , And embrace more happily JUC Package, such as thread pool and other tools .
On the other hand , By enumerating states that can be applied directly , We can make a good secondary development of the existing tools . For example, we can expand AQS, And add the verification of thread state in it , So we can get a customized thread synchronization tool .

6、 ... and 、 How to use thread state

How to use it , I've already said that : Study Java Threads , Custom thread related tool development .
Here is an example of thread learning demo:

/** * @program: learning * @description: Used to confirm thread status problems * @author: Jarry * @create: 2020-10-26 22:25 **/public class ThreadState { public static void main(String[] args) { threadStateTest();// threadStateTest2();// threadStateWithBlocked();// threadStateWithException();// threadStateWithSuspend(); } /** * Practice has proved :Thread.suspend() And Thread.resume() Does not change the thread state * The thread state should be Waiting, Just Waiting. The Timed_Waiting Just Timed_Waiting * Thread.suspend() And Thread.resume() Just suspend the target thread ( And does not release lock resources ) */ private static void threadStateWithSuspend() { Thread thread1 = new Thread(() -> {// LockSupport.park(); LockSupport.parkNanos(2000000000); }); thread1.start(); printThreadState(thread1); LockSupport.parkNanos(500000000); printThreadState(thread1); thread1.suspend(); printThreadState(thread1); LockSupport.parkNanos(500000000); printThreadState(thread1); thread1.resume(); LockSupport.parkNanos(500000000); printThreadState(thread1);// LockSupport.unpark(thread1); } /** * Show thread blocking status */ private static void threadStateWithBlocked() { Runnable runnable = new Runnable() { @Override public void run() { synchronized (ThreadState.class) {// LockSupport.parkNanos(2000000000); LockSupport.park(); } } }; Thread thread1 = new Thread(runnable); Thread thread2 = new Thread(runnable); thread1.start(); LockSupport.parkNanos(500000000); thread2.start(); // Add the following intervals , Then the result :Runnable->Blocked // inference :Thread.start() The thread state is set to Runnable, And then I met sync Lock of , Then switch to Blocked state // LockSupport.parkNanos(500000000); printThreadState(thread2); LockSupport.parkNanos(500000000); printThreadState(thread2); LockSupport.parkNanos(500000000); LockSupport.unpark(thread1); LockSupport.unpark(thread2); } /** * from .........
本文为[Irving the procedural ape]所创,转载请带上原文链接,感谢

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云