溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java多線程-線程狀態(tài)

發(fā)布時(shí)間:2020-07-09 10:06:03 來源:網(wǎng)絡(luò) 閱讀:179 作者:流體石頭 欄目:編程語言

線程狀態(tài)

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

  1. New: 尚未啟動(dòng)的線程的線程狀態(tài)。
  2. Runnable: 可運(yùn)行線程的線程狀態(tài),等待CPU調(diào)度。
  3. Blocked: 線程阻塞等待監(jiān)視器鎖定的線程狀態(tài)。處于synchronized同步代碼塊或方法中被阻塞。
  4. Waiting: 等待線程的線程狀態(tài)。下列不帶超時(shí)的方式:Object.wait、Thread.join、LockSupport.park
  5. Timed Waiting: 具有指定等待時(shí)間的等待線程的線程狀態(tài)。下列超時(shí)的方式:Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、LockSupport.parkUntil

Java多線程-線程狀態(tài)cdn.xitu.io/2019/8/25/16cc94fbdba12374?w=1352&h=702&f=png&s=186390">

常見線程狀態(tài)切換

新建->運(yùn)行->終止

Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("thread1當(dāng)前狀態(tài):" + Thread.currentThread().getState().toString());
                System.out.println("thread1 執(zhí)行了");
            }
        });
System.out.println("沒調(diào)用start方法,thread1當(dāng)前狀態(tài):" + thread1.getState().toString());
thread1.start();
Thread.sleep(2000L); // 等待thread1執(zhí)行結(jié)束,再看狀態(tài)
System.out.println("等待兩秒,再看thread1當(dāng)前狀態(tài):" + thread1.getState().toString());

Java多線程-線程狀態(tài)

新建->運(yùn)行->等待->運(yùn)行->終止

Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {// 將線程2移動(dòng)到等待狀態(tài),1500后自動(dòng)喚醒
                    Thread.sleep(1500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("thread2當(dāng)前狀態(tài):" + Thread.currentThread().getState().toString());
                System.out.println("thread2 執(zhí)行了");
            }
        });
System.out.println("沒調(diào)用start方法,thread2當(dāng)前狀態(tài):" + thread2.getState().toString());
thread2.start();
System.out.println("調(diào)用start方法,thread2當(dāng)前狀態(tài):" + thread2.getState().toString());
Thread.sleep(200L); // 等待200毫秒,再看狀態(tài)
System.out.println("等待200毫秒,再看thread2當(dāng)前狀態(tài):" + thread2.getState().toString());
Thread.sleep(3000L); // 再等待3秒,讓thread2執(zhí)行完畢,再看狀態(tài)
System.out.println("等待3秒,再看thread2當(dāng)前狀態(tài):" + thread2.getState().toString());

Java多線程-線程狀態(tài)

新建->運(yùn)行->阻塞->運(yùn)行->終止

Thread thread3 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (Demo2.class) {
                    System.out.println("thread3當(dāng)前狀態(tài):" + Thread.currentThread().getState().toString());
                    System.out.println("thread3 執(zhí)行了");
                }
            }
        });
synchronized (Demo2.class) {
    System.out.println("沒調(diào)用start方法,thread3當(dāng)前狀態(tài):" + thread3.getState().toString());
    thread3.start();
    System.out.println("調(diào)用start方法,thread3當(dāng)前狀態(tài):" + thread3.getState().toString());
    Thread.sleep(200L); // 等待200毫秒,再看狀態(tài)
    System.out.println("等待200毫秒,再看thread3當(dāng)前狀態(tài):" + thread3.getState().toString());
}
Thread.sleep(3000L); // 再等待3秒,讓thread3執(zhí)行完畢,再看狀態(tài)
System.out.println("等待3秒,讓thread3搶到鎖,再看thread3當(dāng)前狀態(tài):" + thread3.getState().toString());

Java多線程-線程狀態(tài)

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI