Java多线程中线程状态原理的示例分析

  介绍

小编给大家分享一下Java多线程中线程状态原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

java.lang.Thread。州枚举定义了6种线程状态。

<李>

新:尚未启动(start)的线程的线程状态

<李>

RUNNABLE:运行状态,但线程可能正在JVM中执行,也可能在等待CPU调度

<李>

阻塞:线程阻塞,等待监视器锁以进入同步代码块/方法

<李>

等待:等待状态。使用以下不带超时的方式时会进入:Object.wait, Thread.join LockSupport。公园。等待状态的线程需要另一个线程激活。

<李>

TIMED_WAITING:具有指定等待时间的等待状态,使用以下带超时的方式:thread . sleep, Object.wait, Thread.join, LockSupport.parkNanos LockSupport。李parkUntil .

<李>

终止:终止状态。线程正常执行完毕或者发生异常。

状态切换

状态条件状态条件状态新(启动)-》RUNNABLE(等待锁)——》阻塞

RUNNABLE《——(拿到锁)阻塞

RUNNABLE——(等待其他线程通知)——》等

RUNNABLE《——(收到其他线程通知)等着
,

RUNNABLE——(有超时时间的,等待其他线程通知)——》TIMED_WAITING
,

RUNNABLE《——(收到其他线程通知,或者等待超时)-TIMED_WAITING
,

RUNNABLE——(执行结束)——》

终止线程切换代码示例

/* *   ,*多线程运行状态切换示例   ,*/public  class  Demo2  {      public 才能;static  void  main (String [], args), throws 异常{   ,,,//第一种状态切换,新建→运行→终止   ,,,System.out.println(“# # #第一种状态切换,新建→运行→终止# # #“);   ,,,Thread  thread1 =, new 线程(()→{   ,,,,,System.out.println (“thread1当前状态:“,+,Thread.currentThread () .getState ());   ,,,,,System.out.println (“thread1执行完毕“);   ,,,});   ,,,System.out.println(“调用开始之前,thread1当前状态:“,+,thread1.getState ());   ,,,thread1.start ();   ,,,thread . sleep (2000 l);,,//等待thread1执行结束   ,,,System.out.println(“等待thread1执行结束,当前状态:“,+,thread1.getState ());   ,,,System.out.println ();//,,,,thread1.start(),,,,,//此时会抛出java.lang.IllegalThreadStateException      ,,,//第二种状态切换,新建→运行→等待→运行→终止   ,,,System.out.println(“# # #第二种状态切换,新建→运行→等待→运行→终止# # #“);   ,,,Thread  thread2 =, new 线程(()→{   ,,,,,try  {   ,,,,,,,thread . sleep (1500 l);   ,,,,,},catch  (InterruptedException  e), {   ,,,,,,,e.printStackTrace ();   ,,,,,}   ,,,,,System.out.println (“thread2当前状态:“,+,Thread.currentThread () .getState ());   ,,,,,System.out.println (“thread2执行完毕“);   ,,,});   ,,,System.out.println(“调用开始之前,thread2当前状态:“,+,thread2.getState ());   ,,,thread2.start ();   ,,,System.out.println(“调用开始之后,thread2当前状态:“,+,thread2.getState ());   ,,,thread . sleep (200 l);,,//等待一段时间令thread2进入睡眠方法   ,,,System.out.println(“调用开始之后,等待200毫秒,thread2当前状态:“,+,thread2.getState ());   ,,,thread . sleep (2000 l);,,//等待thread2执行结束   ,,,System.out.println(“等待thread2执行结束,当前状态:“,+,thread2.getState ());   ,,,System.out.println ();      ,,,//第三种状态切换,新建→运行→阻塞→运行→终止   ,,,System.out.println(“# # #第三种状态切换,新建→运行→阻塞→运行→终止# # #“);   ,,,Thread  thread3 =, new 线程(()→{   ,,,,,synchronized  (Demo2.class) {   ,,,,,,,System.out.println (“thread3当前状态:“,+,Thread.currentThread () .getState ());   ,,,,,,,System.out.println (“thread3执行完毕“);   ,,,,,}   ,,,});   ,,,synchronized  (Demo2.class) {   ,,,,,System.out.println(“调用开始之前,thread3当前状态:“,+,thread3.getState ());   ,,,,,thread3.start ();   ,,,,,System.out.println(“调用开始之后,thread3当前状态:“,+,thread3.getState ());   ,,,,,thread . sleep (200 l);   ,,,,,System.out.println(“等待200毫秒,thread3等待获取锁,thread3当前状态:“,+,thread3.getState ());   ,,,}   ,,,thread . sleep(1000升),,,,,//等待thread3执行完毕   ,,,System.out.println(“等待1秒,令thread3获取锁后执行方法,thread3当前状态:“,+,thread3.getState ());   null   null

Java多线程中线程状态原理的示例分析