线程的状态

Posted vingliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程的状态相关的知识,希望对你有一定的参考价值。

六种:

技术图片

1、新建(New):创建后尚未启动的线程的状态

 

2、运行(Runnable):包含Running 和Ready

 

3、无限期等待(Waiting):不会被分配CPU执行时间,需要显式被唤醒

没有设置Timeout参数的Object.wait()方法

没有设置Timeout参数的Thread.join()方法

LockSupport.park()方法

 

4、限期等待(Timed Waiting):在一定的时间后由系统自动唤醒

Thread.sleep()方法

设置Timeout参数的Object.wait()方法

设置Timeout参数的Thread.join()方法

LockSupport.parkNanos()方法

LockSupport.parkUntil()方法

 

5、阻塞(Blocked):等待获取排它锁

  问:等待状态和阻塞状态的区别是什么?----》什么时候会产生这个状态?

  -----》阻塞状态在等待着获取排它锁这个事件,在另外一个线程放弃这把锁发生

    而等待状态则在等待一段时间或者有唤醒动作时发生

    程序进入同步区的时候,将进入Blocked状态,比如说当一个线程进入 被synchronized修饰的方法时,这个线程已经获取锁了,而其他线程同时向进入该方法的时候,这些线程则进入Blocked状态

 

6、结束(Terminated):已终止线程的状态,线程已经结束执行

---》当子线程的run()方法执行完成之后或者main线程执行完成之后,就是进入结束状态

public class ThreadTest {
    private static void attack() {
        System.out.println("Fight");
        System.out.println("Current Thread is : " + Thread.currentThread().getName());
    }

    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(){
            public void run(){
                attack();
            }
        };
        System.out.println("current main thread is : " + Thread.currentThread().getName());
        t.start();
        t.join();
        t.start(); // 这个时候子线程已经是结束状态
    }
}

current main thread is : main
Fight
Current Thread is : Thread-0
1
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:708)
at com.interview.javabasic.thread.ThreadTest.main(ThreadTest.java:19)

Process finished with exit code 1

  

以上是关于线程的状态的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段13——Vue的状态大管家

VSCode自定义代码片段13——Vue的状态大管家

JavaSE线程基础

java BottomBarNavigation代码保留片段状态

python多线程

仅在一个片段中隐藏状态栏并在其他片段中显示