中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Java中利用yield實現線程讓步

發布時間:2021-05-10 17:29:52 來源:億速云 閱讀:154 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關怎么在Java中利用yield實現線程讓步,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Java的優點是什么

1. 簡單,只需理解基本的概念,就可以編寫適合于各種情況的應用程序;2. 面向對象;3. 分布性,Java是面向網絡的語言;4. 魯棒性,java提供自動垃圾收集來進行內存管理,防止程序員在管理內存時容易產生的錯誤。;5. 安全性,用于網絡、分布環境下的Java必須防止病毒的入侵。6. 體系結構中立,只要安裝了Java運行時系統,就可在任意處理器上運行。7. 可移植性,Java可以方便地移植到網絡上的不同機器。8.解釋執行,Java解釋器直接對Java字節碼進行解釋執行。

一 點睛

yield()方法是一個和sleep()方法有點類似的方法,它是Thread類提供的一個靜態方法,它也可以讓當前正在執行的線程暫停,但它不會阻塞該線程,它只是讓線程轉入就緒狀態。yield只是讓當前線程暫停一下,讓系統的線程調度器重新調度一次,完全可能的情況是:當某個線程調用了yield()方法后,線程調度器又將其調度出來重新執行。

當某個線程調用了yield方法暫停之后,只有優先級與當前線程相同,或者優先級比當前線程更高的處于就緒狀態的線程才會獲得執行的機會。

二 代碼

public class YieldTest extends Thread
{
   public YieldTest(String name)
   {
      super(name);
   }
   // 定義run方法作為線程執行體
   public void run()
   {
      for (int i = 0; i < 50 ; i++ )
      {
        System.out.println(getName() + " " + i);
        // 當i等于20時,使用yield方法讓當前線程讓步
        if (i == 20)
        {
           Thread.yield();
        }
      }
   }
   public static void main(String[] args)throws Exception
   {
      // 啟動兩條并發線程
      YieldTest yt1 = new YieldTest("高級");
      // 將ty1線程設置成最高優先級
      //yt1.setPriority(Thread.MAX_PRIORITY);
      yt1.start();
      YieldTest yt2 = new YieldTest("低級");
      // 將yt2線程設置成最低優先級
      //yt2.setPriority(Thread.MIN_PRIORITY);
      yt2.start();
   }
}

三 運行

......
低級  18
低級  19
高級  15
低級  20
高級  16
高級  17
高級  18
高級  19
低級  21
高級  20
低級  22
低級  23
低級  24
低級  25
低級  26
...

四 說明

1 此時高級和低級兩個線程優先級一樣。

2 線程調用yield之后將執行機會讓給優先級相同的其他線程。

五 代碼2

public class YieldTest extends Thread
{
   public YieldTest(String name)
   {
      super(name);
   }
   // 定義run方法作為線程執行體
   public void run()
   {
      for (int i = 0; i < 50 ; i++ )
      {
        System.out.println(getName() + " " + i);
        // 當i等于20時,使用yield方法讓當前線程讓步
        if (i == 20)
        {
           Thread.yield();
        }
      }
   }
   public static void main(String[] args)throws Exception
   {
      // 啟動兩條并發線程
      YieldTest yt1 = new YieldTest("高級");
      // 將ty1線程設置成最高優先級
      yt1.setPriority(Thread.MAX_PRIORITY);
      yt1.start();
      YieldTest yt2 = new YieldTest("低級");
      // 將yt2線程設置成最低優先級
      yt2.setPriority(Thread.MIN_PRIORITY);
      yt2.start();
   }
}

六 運行2

高級  17
高級  18
高級  19
高級  20
高級  21
高級  22
高級  23
高級  24
高級  25
高級  26
高級  27
高級  28
......
高級  48
高級  49
低級  12
低級  13
低級  14
低級  15
低級  16
低級  17
低級  18
低級  19
低級  20
低級  21
低級  22
低級  23

上述就是小編為大家分享的怎么在Java中利用yield實現線程讓步了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼伦贝尔市| 遵义县| 嘉峪关市| 秀山| 遂昌县| 普宁市| 临武县| 大冶市| 互助| 根河市| 安乡县| 庄河市| 边坝县| 华亭县| 梁山县| 许昌市| 三亚市| 临潭县| 美姑县| 贵港市| 旬阳县| 广安市| 渭源县| 华宁县| 治县。| 阿拉善左旗| 平江县| 交城县| 保山市| 宣城市| 博客| 临邑县| 海原县| 沈丘县| 南开区| 平邑县| 莎车县| 金门县| 大理市| 安西县| 红桥区|