多线程的状态
- NEW( 系统中线程还未创建,只是有个Thread对象)
- RUNNABLE(就绪状态. 又可以分成正在工作中和即将开始工作)
- TERMINATED(系统中的线程已经执行完了,Thread对象还在)
- TIMED_WAITING(指定时间等待,调用Thread.sleep()方法)
- BLOCKED(线程阻塞状态)
- WAITING(使用wait方法出现的状态)
🔎1.NEW( 系统中线程还未创建,只是有个Thread对象)
public class Test { public static void main(String[] args) { Thread t = new Thread(() -> { }); //线程启动之前获取线程状态 --> 只是有个Thread对象 System.out.println(t.getState()); t.start(); } }
🔎2.RUNNABLE( (就绪状态. 又可以分成正在工作中和即将开始工作)
public class Test { public static void main(String[] args) { Thread t = new Thread(() -> { while(true) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } }); t.start(); //线程就绪状态 System.out.println(t.getState()); } }
🔎3.TERMINATED(系统中的线程已经执行完了,Thread对象还在)
public class Test { public static void main(String[] args) { Thread t = new Thread(() -> { }); t.start(); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } //线程TERMINATED状态 System.out.println(t.getState()); }
🔎4.TIMED_WAITING(指定时间等待,调用Thread.sleep()方法)
public class Test { public static void main(String[] args) { Thread t = new Thread(() -> { while(true) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } }); t.start(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } //线程TIMED_WAITING状态 System.out.println(t.getState()); } }
🔎5.BLOCKED(线程阻塞状态)
阻塞状态值得是代码不继续执行,而在等待
阻塞结束后,线程重新进入就绪状态
影响阻塞的方法
- sleep()
- wait()
- join()
- yield()
🔎6.WAITING(使用wait方法出现的状态)
线程调用 wait() 方法之后,就会变为 WAITING状态
🔎结尾
如果大家有什么不太理解的,可以私信或者评论区留言,一起加油