1.1.2 線程狀態(tài)

6個狀態(tài)的定義:java.lang.Thread.State

  1. New: 尚未啟動的線程的線程狀態(tài)。

  2. Runnable: 可運行線程的線程狀態(tài),等待CPU的調(diào)度。

  3. Blocked: 線程阻塞等待監(jiān)視器鎖定的線程狀態(tài)。

  4. Waiting: 等待線程的線程狀態(tài)。下列不帶超時的方式:

    Object.waiting、Thread.join、LockSupport.port

  5. Timed Waiting: 具有指定等待時間的等待線程的線程狀態(tài)。下列帶超時時間的方式:

    Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、LockSupport.parkUntil

  6. Terminated: 終止線程的線程狀態(tài)。線程正常完成執(zhí)行或者出現(xiàn)異常。

截屏2020-02-12下午12.16.01.png
package firthChapter;

/**
 * 示例二,多線程運行狀態(tài)切換示意
 * @author yekaifei
 */
public class Demo2 {
    //第一種狀態(tài)切換: 新建->運行->終止


    //第二種狀態(tài)切換: 新建->運行->等待->運行->終止
    //第三種狀態(tài)切換: 新建->運行->阻塞->運行->終止
    public static void main(String[] args) throws InterruptedException {
        System.out.println("第一種狀態(tài)切換: 新建->運行->終止");
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                System.out.println("thread1當前狀態(tài):" + Thread.currentThread().getState().toString());
                System.out.println("thread1執(zhí)行了");
            }
        });
        System.out.println("thread1未運行時狀態(tài):" + thread1.getState().toString());
        thread1.start();
        Thread.sleep(2000);
        System.out.println("線程睡眠兩秒等待thread1運行完畢查看狀態(tài):" + thread1.getState().toString());
//        thread1.start();  TODO 注意若線程終止后再調(diào)用會報一個java.lang.IllegalThreadStateException

        System.out.println("-------------------------------------------------");
        System.out.println("第二種狀態(tài)切換: 新建->運行->等待->運行->終止");
        Thread thread2 = new Thread(new Runnable() {
            public void run() {
                System.out.println("thread2當前狀態(tài):" + Thread.currentThread().getState().toString());
                System.out.println("thread2正在執(zhí)行");
                try {
                    System.out.println("thread線程進入等待");
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("thread2睡眠完畢后當前狀態(tài):" + Thread.currentThread().getState().toString());
            }
        });
        System.out.println("thread2未運行時狀態(tài):" + thread2.getState().toString());
        thread2.start();
        Thread.sleep(1000);
        System.out.println("線程睡眠1s等待thread2進入睡眠查看狀態(tài):" + thread2.getState().toString());
        Thread.sleep(1000);
        System.out.println("線程再睡眠1s等待thread2運行完畢后查看狀態(tài):" + thread2.getState().toString());

        System.out.println("-------------------------------------------------");
        System.out.println("第三種狀態(tài)切換: 新建->運行->阻塞->運行->終止");
        Thread thread3 = new Thread(new Runnable() {
            public void run() {
                System.out.println("thread3當前狀態(tài):" + Thread.currentThread().getState().toString());
                synchronized (Demo2.class){
                    System.out.println("thread3當前狀態(tài):" + Thread.currentThread().getState().toString());
                }
            }
        });
        synchronized (Demo2.class) {
            System.out.println("thread3未運行時狀態(tài):" + thread3.getState().toString());
            thread3.start();
            Thread.sleep(500);
            System.out.println("thread3進入阻塞狀態(tài):" + thread3.getState().toString());
        }
        Thread.sleep(2000);
        System.out.println("線程睡眠2s等待thread3運行完畢查看狀態(tài):" + thread3.getState().toString());
    }
}

運行結(jié)果:
firthChapter.Demo2
第一種狀態(tài)切換: 新建->運行->終止
thread1未運行時狀態(tài):NEW
thread1當前狀態(tài):RUNNABLE
thread1執(zhí)行了
線程睡眠兩秒等待thread1運行完畢查看狀態(tài):TERMINATED


第二種狀態(tài)切換: 新建->運行->等待->運行->終止
thread2未運行時狀態(tài):NEW
thread2當前狀態(tài):RUNNABLE
thread2正在執(zhí)行
thread線程進入等待
線程睡眠1s等待thread2進入睡眠查看狀態(tài):TIMED_WAITING
thread2睡眠完畢后當前狀態(tài):RUNNABLE
線程再睡眠1s等待thread2運行完畢后查看狀態(tài):TERMINATED


第三種狀態(tài)切換: 新建->運行->阻塞->運行->終止
thread3未運行時狀態(tài):NEW
thread3當前狀態(tài):RUNNABLE
thread3進入阻塞狀態(tài):BLOCKED
thread3當前狀態(tài):RUNNABLE
線程睡眠2s等待thread3運行完畢查看狀態(tài):TERMINATED
Process finished with exit code 0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容