IT袋

当前位置:主页 > 经验教程 > 建站编程 >

线程的状态及转换

线程的状态及转换 线程的状态转换和转变(2)

时间:2024-02-03 18:51:41 来源:IT袋 作者:马勇
导读:线程的状态及转换,运行结果: Consumer_A创建后的状态:NEWConsumer_B创建后的状态:NEWConsumer_A在调用start后的状态:RUNNABLEConsumer_B在调用start后的状态:RUNNABLE----------------------

线程的状态及转换

运行结果:


Consumer_A创建后的状态:NEW
Consumer_B创建后的状态:NEW
Consumer_A在调用start后的状态:RUNNABLE
Consumer_B在调用start后的状态:RUNNABLE
--------------------------------------
Consumer_A 当前的状态:WAITING
Consumer_B 当前的状态:WAITING
Producer-C 发送一条消息,当前消息数量:1
Consumer-B 当前状态:RUNNABLE ---收到一条消息:1 退出
--------------------------------------
Consumer_A 当前的状态:WAITING
Consumer_B 当前的状态:TERMINATED
Producer-C 发送一条消息,当前消息数量:1
Consumer-A 当前状态:RUNNABLE ---收到一条消息:1 退出
--------------------------------------
Consumer_A 当前的状态:TERMINATED
Consumer_B 当前的状态:TERMINATED
进程已结束,退出代码 0

TIMED_WAITING

运行中的线程,在执行以下方法Object.wait(long),、Thread.sleep(long)、 Thread.join(long)、LockSupport.parkNanos()、LockSupport.parkUntil()时,状态由RUNNABLE变为TIMED_WAITING。

此时线程不再占用CPU资源,直到到了超时时间或被notify()后,再进入Ready状态,等待抢夺获取CPU时间片。

本状态属于阻塞状态的一种,即等待另一个线程执行某种操作之后,再继续执行自身线程。

下面为NEW、RUNNABLE、BLOCKED、WAITING、TERMINATED状态的代码


@Test
public void testStates(){
    Thread tha =  new Thread(()->{
        try {
            Thread.sleep(30L);
        }catch (Exception e){
            e.printStackTrace();
        }
        syncMethod();
    }, "Thread-A");
    Thread thb =  new Thread(()->{
        syncMethod();
    }, "Thread-B");
    System.out.println("Thread-A 线程刚创建后的状态 : " +tha.getState());
    tha.start();
    thb.start();
    System.out.println("Thread-A 线程执行start方法后的状态 : "+tha.getState());
    try {
        Thread.sleep(40L);
    }catch(Exception e){
        e.printStackTrace();
    }
    System.out.println("Thread-A 线程等待执行ayncMehtod时的状态 : "+tha.getState());
    try {
        Thread.sleep(30L);
    }catch(Exception e){
        e.printStackTrace();
    }
    System.out.println("Thread-A 线程执行asyncMehtod后线程等待50S时的状态 : "+tha.getState());
    try {
        Thread.sleep(60L);
    }catch(Exception e){
        e.printStackTrace();
    }
    System.out.println("Thread-A 线程运行结束后的状态 : "+tha.getState());
}
private synchronized void syncMethod(){
    System.out.println("----" + Thread.currentThread().getName() + " 线程获取到方法锁");
    try {
        Thread.sleep(50L);
    }catch(Exception e){
        e.printStackTrace();
    }
}

运行结果:

read-A 线程刚创建后的状态 : NEW
Thread-A 线程执行start方法后的状态 : RUNNABLE
----Thread-B 线程获取到方法锁
Thread-A 线程等待执行ayncMehtod时的状态 : BLOCKED
----Thread-A 线程获取到方法锁
Thread-A 线程执行asyncMehtod后线程等待50S时的状态 : TIMED_WAITING
Thread-A 线程运行结束后的状态 : TERMINATED
进程已结束,退出代码 0

相关阅读

  • 什么是光电混合缆? 光电混合缆是指什么?

    什么是光电混合缆? 光电混合缆是指什么?

    IT电脑小知识篇,关于什么是光电混合缆方面的介绍,接下来一起来看看吧。 光电混合缆,又称光电一体化线缆,是一种综合了光纤和铜导线的电缆,允许在同一根线缆中传输数据和电力。 它

  • 双活数据中心是什么? 双活数据中心有哪些优点​

    双活数据中心是什么? 双活数据中心有哪些优点​

    今天带来的IT技巧小经验双活数据中心是什么方面的介绍,继续往下看吧! 双活数据中心是指在两个地理位置相距较远的地方建立至少两个数据中心,并在这些数据中心间运行实时应用程序。

  • mysql数据库基础知识是什么 数据库零基础入门教学

    mysql数据库基础知识是什么 数据库零基础入门教学

    今日小编为你讲解mysql数据库基础知识是什么和数据库零基础入门教学IT技巧方面的经验,请看下面详细的介绍。 MYSQL数据库简介 1、数据库就是存储数据的仓库,其本质是一个文件系统。数据

  • js数组分割函数 定义js数组的正确方法

    js数组分割函数 定义js数组的正确方法

    IT袋网为大家说一说js数组分割函数和定义js数组的正确方法的电脑小知识,下面小编为您详细解答 在创建程序时,有时需要将字符串进行分割划分为数组,这个时候我们可以使用split函数来实