1. 程式人生 > >Java執行緒系列

Java執行緒系列

01-Java執行緒的6種狀態及切換(透徹講解)

https://blog.csdn.net/pange1991/article/details/53860651

02-wait和sleep的區別

https://blog.csdn.net/a58220655/article/details/76695142

1.wait和notify方法定義在Object類中,因此會被所有的類所繼承。 這些方法都是final的,即它們都是不能被重寫的,不能通過子類覆寫去改變它們的行為。 而sleep方法是在Thread類中是由native修飾的,本地方法。

    public static native void sleep(long l) throws InterruptedException;

2.當執行緒呼叫了wait()方法時,它會釋放掉物件的鎖。
另一個會導致執行緒暫停的方法:Thread.sleep(),它會導致執行緒睡眠指定的毫秒數,但執行緒在睡眠的過程中是不會釋放掉物件的鎖的。

3.正因為wait方法會釋放鎖,所以呼叫該方法時,當前的執行緒必須擁有當前物件的monitor,也即lock,就是鎖。要確保呼叫wait()方法的時候擁有鎖,即,wait()方法的呼叫必須放在synchronized方法或synchronized塊中。

順便說說notify(),notify()方法會喚醒一個等待當前物件的鎖的執行緒。 如果多個執行緒在等待,它們中的一個將會選擇被喚醒。這種選擇是隨意的,和具體實現有關。(執行緒等待一個物件的鎖是由於呼叫了wait方法中的一個)。

被喚醒的執行緒是不能被執行的,需要等到當前執行緒放棄這個物件的鎖。
被喚醒的執行緒將和其他執行緒以通常的方式進行競爭,來獲得物件的鎖。也就是說,被喚醒的執行緒並沒有什麼優先權,也沒有什麼劣勢,物件的下一個執行緒還是需要通過一般性的競爭。
且notify方法和wait一樣,是需要放在synchronized方法或synchronized塊中。

03-Java多執行緒學習(吐血超詳細總結)

https://blog.csdn.net/pange1991/article/details/53860651

04-執行緒池入門

https://www.cnblogs.com/chenmo-xpw/p/7059782.html