近期在使用多線程開發時遇到一些有意思的東西—在線程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