thread中sleep和wait方法的區別,以及lock和synchronized的區別
阿新 • • 發佈:2019-01-02
最近在專案中設計業務請求邏輯這一塊,運用到了thread的一些知識,所以就又去特定的研究了一下!
首先 sleep和wait的區別:
1、我們通過檢視原始碼得知,sleep是Threa的靜態方法,而wait方法是Object的成員方法;
2、sleep沒有synchnorized關鍵字也會執行,而wait方法必須要在synchnorized的作用域及臨界區下執行,否則就會報IllegalMonitorStateException 異常,就是非法監控狀態異常!
3、然後我們通過debug不難發現,sleep方法不會釋放共享資源的鎖,而wait方法會釋放共享資源的鎖!
當我們使用利用到執行緒知識的時候,必然會涉及到執行緒同步,那就必然會用到lock和Synchnorized兩種鎖!那就必然涉及的兩折的區別,今天就簡單給大家說下兩者的之間的區別,以下只是自己的一點拙見,僅供大家看看參考!
lock和Synchnorized的區別:
1、lock是物件級別的鎖(也叫程式級別的鎖),可以自己定義鎖,自己建立物件(如:Lock lock = new ReentrantLock(true),然後建立Condition con = lock.newCondition();true這個引數代表公平鎖:就是哪個執行緒等的時間長就讓誰進入;condition這個是lock的一個封裝類,裡面封裝了await()和sigalAll()方法,和lock鎖配套使用)可以自己開、解鎖;而synchronized是jvm級別的鎖,我們無法把控!
2:lock是公平鎖,就是由等待時間最長的執行緒先進入共享資源,而synchnorized非公平(多個執行緒強一個鑰匙)。