多線程中是否必須使用sleep方法,爲什麼要用 Sleep() 方法?(詳細說明)

近期在使用多線程開發時遇到一些有意思的東西—在線程run方法中是否需要當前線程睡眠一段時間。

要了解sleep方法,那麼首先得瞭解到它的原理及其使用方法。

使用簡介:

在這裏以JAVA的API爲例(當然其它語言亦可以),JAVA的API中是這麼描述的,

	public static void sleep(long millis,
                         int nanos)
                  throws InterruptedException

在指定的毫秒數加指定的納秒數內讓當前正在執行的線程休眠(暫停執行),
此操作受到系統計時器和調度程序精度和準確性的影響。

參數: millis - 以毫秒爲單位的休眠時間。 nanos - 要休眠的另外 0-999999 納秒。 拋出: IllegalArgumentException - 如果 millis 值爲負或 nanos 值不在 0-999999 範圍內。 InterruptedException - 如果任何線程中斷了當前線程。當拋出該異常時,當前線程的中斷狀態 被清除 API中說的很明確,這個方法的目的就是讓線程休眠,並且這個操作其實是沒有釋放鎖的。

那麼問題來了,sleep到底什麼時候用呢?

我們在使用多線程的時候會發現,有時候需要程序運行時間特別長了會經常出現一些問題,或者當前我們開啓了多個線程它們分別執行幾個任務,但是因爲執行的任務時間非常短,有時候cpu切換時候會出現一系列的問題,那麼這時候可能的原因就有是否因爲cpu一直在執行一個線程或者其他的原因呢

當我們設置sleep時,等於告訴cpu,當前的線程不再運行,持有當前對象的鎖。那麼這個時候cpu就會切換到另外的線程了。這種操作有些時候是非常好的。

那麼迴歸標題,究竟應不應該使用sleep呢,LZ認爲還是具體業務具體分析,看是否需要添加此方法。

原文鏈接:https://blog.csdn.net/qq_34401512/article/details/77765600

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章