介绍
RUNNABLE《——(拿到锁)阻塞
RUNNABLE——(等待其他线程通知)——》等
RUNNABLE《——(收到其他线程通知)等着
,
RUNNABLE——(有超时时间的,等待其他线程通知)——》TIMED_WAITING
,
RUNNABLE《——(收到其他线程通知,或者等待超时)-TIMED_WAITING
,
RUNNABLE——(执行结束)——》
小编给大家分享一下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——(有超时时间的,等待其他线程通知)——》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 nullJava多线程中线程状态原理的示例分析