Sleep,join,yield方法,守護執行緒

2021-09-29 12:21:52 字數 1175 閱讀 8832

作用:sleep方法可以讓執行緒進入waiting狀態,並且不占用cpu資源,但是不釋放鎖,直到規定時間後再執行,休眠期間如果被中斷,會丟擲異常

特定:不釋放鎖,指的是不釋放synchronized和lock的鎖,

面試問題:wait方法和sleep方法的異

相同:不同:

join方法

1.作用:因為新的執行緒加入了我們,所以我們要等他執行完再執行

2.用法:主線程等待子執行緒執行完

3遇到中斷:是主線程被中斷,主線程丟擲異常,主線程執行完畢之後,期間如果子執行緒進行了睡眠,導致子執行緒還沒有結束,所以在處理中斷的時候,應該將子執行緒內容進行終止,解決辦法是:將中斷傳遞給子執行緒,用thread.interrupt()

4.原理:

public

class thread implements runnable

}public final synchronized void join(long millis)

throws interruptedexception

if (millis == 0)

} else

wait(delay);

now = system.currenttimemillis() - base;}}

}

內部是乙個用synchronized修飾的方法,根據傳入的引數進行邏輯判斷,如果沒有傳入了引數,呼叫wait(0)進行一直等待,直到被喚醒,如果傳入了引數將對引數進行運算(加減),然後呼叫有引數的wait方法,進入阻塞狀態,但是方法內部沒有進行notify過程,而是thread類等run方法執行之後,自動呼叫notify來進行喚醒。

yield方法

1.作用:釋放我們的cpu時間片,執行緒的狀態依然是runnable,不會釋放鎖,不會進入阻塞狀態

2.定位:jvm不保證遵循

3.yield和sleep的區別

呼叫sleep方法,會認為進入阻塞狀態,不會對其進行排程,yield是暫時將自己的排程權讓給別人,但是又可以立即進入競爭狀態,隨時可能被再度呼叫。

守護執行緒

作用:給使用者執行緒提供服務

守護執行緒和普通執行緒的區別:

1.整體無區別

2.使用者執行緒能夠影響到jvm的退出,而守護執行緒不會影響jvm的退出

3.普通執行緒執行的是我們的邏輯,而守護執行緒服務於使用者執行緒

關於springCloud中服務方呼叫方的配置

1.我方是服務方,別人呼叫我方,由我方提供位址,不需要呼叫feign。那麼,位址資訊在resourceconfig裡面做配置,resourceconfig中配置的位址相當於是把請求位址暴露給對方,並在此位址請求時對他放行。configuration enableresourceserver publ...

Container DataItem幾種方式

在繫結資料時經常會用到這個句程式 databinder.eval container.dataitem,x 或者 databinder.eval container,dataitem.x 今天又學到一種,而且微軟也說這種方法的效率要比以上兩種高。datarowview container.datai...

Linux Carmer driver註冊方法

最近又開始看carmer的驅動了,在linux下通常實用video4linux框架來實現video capture camera capture等功能,先說一下裝置註冊部分,ov7670.c中,註冊方法如下 static struct v4l2 i2c driver data v4l2 i2c da...