Java线程的状态与常用方法有哪些

其他教程   发布日期:2025年03月27日   浏览次数:175

这篇文章主要讲解了“Java线程的状态与常用方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java线程的状态与常用方法有哪些”吧!

可以通过 Thread.getState 方法获得线程的状态(线程一共有 6 种状态)

NEW(新建)new:尚未启动

RUNNABLE(可运行状态)runnable:正在 JVM 中运行;或者正在等待操作系统的其他资源(比如处理器)

//有些编程语言会把RUNNABLE分成2种情况
//1.running
//2.ready
//以上2种在Java中都属于RUNNABLE

BLOCKED(阻塞状态) blocked:正在等待监视器锁(内部锁)

WAITING(等待状态) waiting:在等待另一个线程

调用以下方法会处于等待状态

没有超时值的 Object.wait

没有超时值的 Thread.join

LockSupport.park

//后续会详细介绍

TIMED_WAITING(定时等待状态) timed_waiting

调用以下方法会处于定时等待状态

Thread.sleep

有超时值的 Object.wait

有超时值的 Thread.join

LockSupport.parkNanos

LockSupport.parkUnti

//后续会详细介绍

TERMINATED(终止状态):已经执行完毕

部分实例:

  1. public class Main {
  2. public static void main(String[] a) {
  3. Thread dangqian = Thread.currentThread();//获取主线程
  4. System.out.println(dangqian.getState());//输出RUNNABLE
  5. //表示主线程正处于RUNNABLE状态
  6. Thread tj = new Thread();//新建1个线程
  7. System.out.println(tj.getState());//输出NEW
  8. Thread tj1 = new Thread(new Runnable() {
  9. @Override
  10. public void run() {
  11. System.out.println("ACM");
  12. }
  13. });
  14. tj1.start();
  15. //启动执行完run方法后线程终止 此时处于TERMINATED状态
  16. }
  17. }

sleep interrupt 介绍

可以通过 Thread.sleep 方法暂停当前线程,进入WAITING状态

在暂停期间,若调用线程对象的 interrupt 方法中断线程,会抛出 java.lang.InterruptedException 异常

实例(注释)介绍更为明了:

  1. public class Main {
  2. public static void main(String[] a) {
  3. Thread tj = new Thread(new Runnable() {
  4. @Override
  5. public void run() {
  6. System.out.println("1");
  7. try {
  8. Thread.sleep(3000);//sleep是静态方法,所以通过类名来调用;让线程睡3s
  9. }catch (InterruptedException e) {
  10. e.printStackTrace();
  11. }
  12. System.out.println("2");
  13. }
  14. });
  15. tj.start();
  16. //因为是多线程,在执行tj线程时,主线程依然往下走
  17. try {
  18. Thread.sleep(1000);//让主线程睡1s
  19. } catch (InterruptedException e) {
  20. e.printStackTrace();
  21. }
  22. System.out.println("3");
  23. //由于tj线程睡得较久,所以先打印3,再打印2
  24. tj.interrupt();//中断此线程,但实际上只是给线程设置一个中断标志,线程仍会执行;在这里用于触发异常
  25. }
  26. }

输出:

1
3
2

join isAlive 介绍

A.join 方法:等线程 A 执行完毕后,当前线程再继续执行任务。可以传参指定最长等待时间

A.isAlive 方法:查看线程 A 是否还活着

实例:

  1. public class Main {
  2. public static void main(String[] a) {
  3. Thread tj = new Thread(new Runnable() {
  4. @Override
  5. public void run() {
  6. System.out.println("1");
  7. try {
  8. Thread.sleep(3000);//sleep是静态方法,所以通过类名来调用;让线程睡3s
  9. }catch (InterruptedException e) {
  10. e.printStackTrace();
  11. }
  12. System.out.println("2");
  13. }
  14. });
  15. tj.start();
  16. System.out.println(tj.isAlive());//此时3s未过,tj线程仍在执行;所以输出true
  17. try {
  18. tj.join();//等tj线程执行完毕再往下执行
  19. //tj.join(1000); 等待tj线程1s再往下执行
  20. } catch (InterruptedException e) {
  21. e.printStackTrace();
  22. }
  23. System.out.println("3");
  24. System.out.println(tj.getState());
  25. System.out.println(tj.isAlive());//tj线程已执行完毕;所以输出false
  26. }
  27. }

输出:

true
1
2
3
TERMINATED
false

以上就是Java线程的状态与常用方法有哪些的详细内容,更多关于Java线程的状态与常用方法有哪些的资料请关注九品源码其它相关文章!