java線程研究---(5)暫停Thread:yield

來源:互聯網
上載者:User

暫停Thread


yield方法:

靜態方法Thread.yield() yield方法會讓Thread對象直接從執行(running)狀態進入等待執行(runnable)狀態。 這裡的“直接”是指沒有設定等待時間(沒有blocked pool等待池的概念),也就是yield方法沒有參數。 但是。 因為(running)狀態和(runnable)狀態之間的轉換,需要cpu調度的:可能延遲一點時間,也可能一點也不延遲。 所以我對yield的總結是: 當一個Thread對象,調用Thread.yield()方法, 其實是通知cpu開始調度:running--->runnable
至於cpu何時開始調度,不得而知:可能延遲一點時間調度,也可能一點也不延遲調度。 當cpu調度成功,當前Thread對象進入runnable狀態。 此時,可能由於沒有其他的Thread對象搶佔cpu,當前Thread對象會又被cpu調度,到running狀態。
線程狀態圖沒有更新。其實就是unning<--->runnable這個狀態之間直接轉換。

來看看一段代碼吧。
Hello1

package thread;public class Hello1 extends Thread {String name;public Hello1(String n) {this.name = n;}@Overridepublic void run() {                // 迴圈變成1000次for (int i = 1; i <= 1000; i++) {System.out.println(name + " Hello " + i);}}}


Hello2
package thread;public class Hello2 implements Runnable {String name;public Hello2(String n) {this.name = n;}@Overridepublic void run() {                // 迴圈變成1000次for (int i = 1; i <= 1000; i++) {System.out.println(name + " Hello " + i);                        // 這裡開始調用yieldThread.yield();}}}

線程執行類 ThreadsExample1
package thread;public class ThreadsExample1 {public static void main(String[] abc) throws InterruptedException {// thread taskHello1 h1 = new Hello1("Hello1:");Hello2 h2 = new Hello2("hello2:");// thread new , runnableThread t1 = new Thread(h1, "thread1, hello1");Thread t2 = new Thread(h2, "thread2, hello2");t2.start();  // 注意這裡,先開始t2線程t1.start();}}


Hello1和Hello2的迴圈次數變長到1000 t2線程先啟動。 我們來看看列印結果

............................ hello2: Hello 372
hello2: Hello 373
hello2: Hello 374
hello2: Hello 375
Hello1: Hello 1
Hello1: Hello 2
Hello1: Hello 3
Hello1: Hello 4
............................ Hello1: Hello 997
Hello1: Hello 998
Hello1: Hello 999
Hello1: Hello 1000
hello2: Hello 376
hello2: Hello 377
hello2: Hello 378
hello2: Hello 379
hello2: Hello 380
hello2: Hello 381


就如上列印結果來看。 t2 調用Thread.yield();之後,通知了cpu開始調度。 但是cpu調度響應需要一點時間,就這一點時間內,t2還在運行, 列印到hello2: Hello 375的時候,t2進入runnable狀態, t1進入running狀態。 t1列印到Hello1: Hello 1000的時候,t1進入死亡狀態。 cpu調度t2繼續執行,直至t2進入死亡狀態。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.