寫這篇博文,無他,就是在看java線程知識時,感覺一些知識點,必須背下,所以就自己複述一下,寫了下來。
在同步中,需要對含有同步代碼的對象進行鎖定。
先介紹兩個類的一些重要方法:
(Object) wait 方法,作用:使執行該對象的線程進入該對象的等待隊列中。
@throw InterrupedException cause 當執行該對象的線程沒有獲得該對象的鎖時拋出
notes: 而當該線程調用了該方法,則會放棄原先獲得該對象的鎖。(這是一些線程面試,筆試題經常要考的。注意區別該對象,與執行該對象的線程)
notify ,notifyAll 方法, 作用:喚醒該對象上的等待線程,一般,與wait配對使用。
note: 調用該方法時,如果執行該方法的線程有獲得該對象的鎖,則不會放棄它的鎖。
(Thread) 靜態方法:sleep ,作用:使該線程(sleep方法,所屬的線程),進入睡眠狀態(即,“阻塞”狀態,線程五態中的一種:新建,可運行態,運行中,阻塞狀態,死亡態)。
@throw InterrupedException
notes: 當該方法被調用時,已在該線程對象(注意,因爲它是Thread的方法,實現線程很大一部分,得繼承Thread類,所以它是線程對象)上鎖,不會被釋放,將會繼續保持。
yield,作用: 使該線程進入可運行態(一般,是從運行態,轉變到可運行態)。
note:: 同樣,線程將同樣保持鎖。
final 方法: join, 作用:使當前在執行該行代碼(即調用了這個方法的線程)加入到這個方法所屬的線程的尾部,直到這個方法所屬的線程執行完,纔可以執行。
@throw: InterrupedException
note: 同樣,線程將同樣保持鎖。
setPriority(int priorityInt) ,作用:設置當前線程的優先級。