2012-08-08 75 views
0

我正在用java測試多線程,基本上我想做兩個線程,並讓它們數到一個數。是否有可能將線程自己睡眠?

但是當他們到達大約一半的時候,他們會睡一段時間。所以我正在考慮在FOR循環中放置一條IF語句,以查看它何時到達一半,然後如果有,它會自己睡覺。

我正在運行一個單核心CPU atm,因爲我在學校的電腦上,所以在theroy,當我把第一個線程睡覺,第二個應該開始?

此外,是否有可能把第一個線程睡覺,從第二個,反之亦然?

回答

1

可以使用Thread.sleep(int milliseconds)

使當前執行的線程休眠(暫時停止 執行)爲指定的毫秒數,但須 精度和準確度的系統的Ti mers和調度程序。線程 不會丟失任何監視器的所有權。

至於使一個線程暫停另一個線程,您可以公開其他線程可以調用的方法來暫停其他線程的執行。

就像任何其他多線程程序,請留意race conditions

至於你的其他問題,單核處理器應該能夠運行多個線程,所以核心數量(在這種情況下)並不重要。

0

線程只能使用Thread.sleep使自己睡眠。即使在單核CPU上運行,JVM也會爲所有可運行的線程安排時間。如果您想要更好地控制每個線程運行的時間,您需要查看java.util.concurrent包中的信號量和其他鎖定/調度機制。

詢問更具體的問題,以獲得有關您在項目中卡住的位置的幫助。

0

對於你的問題的第一部分:

這有可能是第二個線程可通過執行一次完成到達的第一個線程睡眠()語句。這是因爲JVM會根據每個啓動時間爲線程分配CPU時間,而不是基於複雜的調度算法。當您致電Thread.sleep(1000)時,唯一保證的是該線程將在該點停止執行至少1000毫秒。第二部分 - 讓另一條線從另一條線入睡 - 已被其他人解決。你需要注意比賽條件。