成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Thread.onSpinWait()有什么作用?為什么要睡眠0毫秒?

開發 后端
Java中,使用Thread.sleep(0)的目的是讓當前線程主動放棄CPU的執行時間片,以便給其他具有相同優先級的線程執行的機會。雖然參數為0,但實際上并不是讓線程休眠0毫秒,而是讓線程進入就緒狀態,等待重新獲取CPU執行時間。

概述

今天在整理之前學習資料時,偶然看見之前自己寫的demo:

public class MyTest {
    static volatile boolean temp = true;

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            while (temp) {
                Thread.onSpinWait(); // Thread.sleep(0);
            }
            System.out.print("檢測到變量為false,退出循環");
        });
        thread.start();
        Thread.sleep(3000L);
        temp = false;
    }

}

運行結果:

檢測到變量為false,退出循環

為了使線程能夠更快的循環,以便讓我能夠及時的知道temp的狀態,盡快的進行下一次循環,在方法中我比較粗暴的加入了Thread.onSpinWait()方法,Thread.onSpinWait()方法大家可以認為是Thread.sleep(0)的作用,那么我為什么要加一個睡眠0毫秒的動作呢?讓線程掛起0毫秒有什么用途呢?

線程狀態

在Java中,線程有三個基本的狀態:就緒狀態(Runnable)、運行狀態(Running)和阻塞狀態(Blocked)。

  • 就緒狀態(Runnable):當線程被創建并啟動后,它進入就緒狀態。在就緒狀態下,線程已經準備好執行,但還沒有獲取到CPU的執行時間片。線程處于就緒狀態時,可以被調度器選擇為下一個要執行的線程。
  • 運行狀態(Running):當線程獲取到CPU的執行時間片時,它進入運行狀態。在運行狀態下,線程正在執行其任務代碼。線程會一直保持運行狀態,直到它主動放棄CPU的執行時間片,或者被其他高優先級線程搶占CPU。
  • 阻塞狀態(Blocked):線程在某些情況下會進入阻塞狀態。當線程在執行過程中遇到某些阻塞的情況,比如等待I/O操作、等待獲取鎖、等待其他線程的通知等,它會進入阻塞狀態。在阻塞狀態下,線程暫時停止執行,不會占用CPU資源。當阻塞條件滿足時,線程會被喚醒并重新進入就緒狀態,等待獲取CPU執行時間片。

線程的狀態轉換如下:

  • 就緒狀態 -> 運行狀態:當線程被調度器選擇為下一個要執行的線程時,它從就緒狀態轉換為運行狀態。
  • 運行狀態 -> 就緒狀態:線程主動調用yield()方法或者sleep()方法,或者被其他高優先級線程搶占CPU時,它從運行狀態轉換為就緒狀態。
  • 運行狀態 -> 阻塞狀態:線程在執行過程中遇到阻塞條件,比如等待I/O操作或獲取鎖時,它從運行狀態轉換為阻塞狀態。
  • 阻塞狀態 -> 就緒狀態:當阻塞條件滿足時,線程被喚醒,從阻塞狀態轉換為就緒狀態,等待獲取CPU執行時間片

線程的狀態轉換是由操作系統的調度器和Java虛擬機共同管理的。通過合理地管理線程的狀態,可以實現多線程的并發執行和協作操作。

Thread.sleep(0)的意義

Java中,使用Thread.sleep(0)的目的是讓當前線程主動放棄CPU的執行時間片,以便給其他具有相同優先級的線程執行的機會。雖然參數為0,但實際上并不是讓線程休眠0毫秒,而是讓線程進入就緒狀態,等待重新獲取CPU執行時間。

使用Thread.sleep(0)的主要意義在于提高多線程程序的公平性和響應性。當一個線程執行Thread.sleep(0)時,操作系統會重新調度其他就緒狀態的線程,這樣可以避免某個線程長時間占用CPU而導致其他線程無法得到執行的情況,從而提高了程序的公平性。

此外,Thread.sleep(0)還可以用于線程間的協作。當一個線程需要通知其他線程進行某些操作時,可以使用Thread.sleep(0)來主動放棄CPU執行時間,讓其他線程有機會執行相應的操作。

Thread.onSpinWait()

@IntrinsicCandidate
public static void onSpinWait() {}

onSpinWait()方法是空實現,被@IntrinsicCandidate修飾,在JDK中,被@IntrinsicCandidate修飾的方法作為內部候選方法(intrinsic candidate)。內部候選方法是指可以由編譯器或虛擬機進行特殊處理的方法,以提供更高效的執行方式或更好的性能。

簡單來說就是jdk對Thread.onSpinWait()方法進行了特殊優化,那么優化后的效率到底有沒有提升呢?

public class MyTest {
    public static void main(String[] args) throws InterruptedException {
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
            Thread.sleep(0);
        }
        System.out.println(System.currentTimeMillis() - start);
        start = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
            Thread.onSpinWait();
        }
        System.out.println(System.currentTimeMillis() - start);
        start = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
        }
        System.out.println(System.currentTimeMillis() - start);
    }
}

運行結果:

23224
2
0

上述程序,循環一億次可以看出,在速度方面 空循環 > Thread.onSpinWait() > Thread.sleep(0), 空循環和Thread.onSpinWait()僅存在細微差別。

在cpu利用方面: Thread.onSpinWait() = Thread.sleep(0) > 空循環

責任編輯:姜華 來源: 今日頭條
相關推薦

2013-11-11 11:17:45

AngularJS性能優化

2023-12-05 18:00:27

MySQLSQL

2021-07-13 09:49:08

鴻蒙HarmonyOS應用

2021-04-27 06:20:25

MySQL集群優化

2025-06-27 09:05:47

2015-08-06 10:14:15

造輪子facebook

2022-08-15 08:27:02

基站網絡

2013-03-12 14:30:09

Ubuntu操作系統

2024-11-18 17:06:11

Java線程

2011-08-19 08:58:34

Linux

2018-01-31 14:50:04

LinuxmacOS .bashrc

2017-05-31 13:58:05

戴爾宕機服務器

2025-04-10 08:00:00

服務限流開發高并發

2018-08-02 15:24:05

RPCJava微服務

2023-12-07 12:21:04

GCJVM垃圾

2024-06-05 10:07:00

限流微服務算法

2021-01-21 17:27:05

區塊鏈加密貨幣穩定幣

2022-05-16 23:10:54

穩定幣區塊鏈加密貨幣

2014-08-25 10:00:18

開源

2015-05-12 11:04:42

Java EE學習Java EE
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区影院 | 一区二区久久电影 | 日韩日韩日韩日韩日韩日韩日韩 | 日韩视频免费看 | 精品国产一区二区国模嫣然 | www.精品国产 | 亚洲av毛片 | 日韩免费一区二区 | 成人在线免费观看视频 | 一区二区三区欧美在线 | 天天色图 | 久久亚洲免费 | 九九九精品视频 | 91国内视频在线 | 视频在线亚洲 | 欧美极品在线视频 | 成人午夜影院 | 国产精品特级毛片一区二区三区 | 国产精品一区二区免费看 | 精产国产伦理一二三区 | 亚洲精品一区二区三区蜜桃久 | 亚洲成人一级 | 久久里面有精品 | 日韩免费在线观看视频 | 国产网站在线播放 | 成人在线视频免费观看 | www.久| 在线 丝袜 欧美 日韩 制服 | 一级女毛片 | 国产伦精品一区二区三毛 | 91久久久精品国产一区二区蜜臀 | 一本一道久久a久久精品综合蜜臀 | 九九久久精品视频 | 在线看片福利 | 欧美亚洲国产一区 | 精品久久久久久久人人人人传媒 | 91高清视频在线观看 | 国产在线精品一区二区三区 | 二区三区视频 | 久草网址 | 亚洲第一视频网站 |