2013-04-29 81 views
2
public class SleepMessages { 
    public static void main(String args[]) 
     throws InterruptedException { 
     String importantInfo[] = { 
      "Mares eat oats", 
      "Does eat oats", 
      "Little lambs eat ivy", 
      "A kid will eat ivy too" 
     }; 

     for (int i = 0; 
      i < importantInfo.length; 
      i++) { 
      //Pause for 4 seconds 
      Thread.sleep(4000); 
      //Print a message 
      System.out.println(importantInfo[i]); 
     } 
    } 
} 

在這段代碼中沒有創建線程,但確實存在Thread.sleep(4000)。那麼這個線程代表什麼?主程序本身?換句話說,Thread是否暗含了程序本身?這個Java代碼中的Thread是什麼?

+0

它代表了當前線程執行的主要方法。 – asgs 2013-04-29 20:26:45

+0

'線程'是'線程'類。關於它的一個有趣的地方是'sleep'方法是類級別的方法,但它將在調用它的當前線程上運行。 – nhahtdh 2013-04-29 20:29:03

+0

@nhahtdh它是如何完成的? – Lucas 2013-04-29 20:41:45

回答

5

是的,Thread.sleep()作用於當前線程,在您的情況下,它只是運行程序時必須存在的一個線程。

+2

這通常稱爲「主」線程。 – Gray 2013-04-29 20:33:29

+1

在這種情況下,是的,但理論上可能有其他線程調用'main'方法,所以「當前線程」是一樣準確的 – Sentry 2013-04-29 20:58:19

0

sleep靜態調用導致當前執行的線程到睡眠,在這種情況下簡單地暫停輸出(相對於得到到另一個線程或任何)

1

在Java中,sleep是靜態成員函數類Thread導致調用它的線程進入睡眠狀態。

2

確實隱含線程程序本身?

號要從Thread.sleep() javadocs引證:

使當前執行的線程休眠(暫時停止 執行)的毫秒指定數量,受 系統定時器的精度和準確度和調度程序。

因此Thread.sleep()睡眠當前正在運行的線程發生在運行main(...)方法的「主」線程。

那麼這個線程代表什麼?主程序本身?

No. Thread是該類的名稱。這取決於你打電話的方法是什麼。然而,對於大多數每線程方法,(sleep(...)yield()等)Thread.method()應用於當前正在運行的線程或Thread.currentThread()

1

在每個Java程序中,至少總是存在一個Thread。第一個線程被稱爲「主」。

Thread.sleep(4000); 

呼叫在這一刻當前線程,並被迫等待4000毫秒。

您還沒有創建任何線程,但Java虛擬機創造了「主」線程,負責運行程序:)