控制線程的方法

2021-08-15 18:12:12 字數 856 閱讀 5612

控制線程的方法有join(),sleep()(休眠)、yield()(讓步)、suspend()(掛起)、resume()(恢復);

簡單的測試下sleep()和yield(),並說明執行緒在這兩種狀態下對cpu的持有狀態和對同步鎖的持有狀態:

在這裡不貼出程式執行的結果,大家可以根據**在自己的機器上跑一**會一下我接下來要闡述的,這要看起來比我直接貼出圖要效果更好。

在沒有新增同步鎖synchornized(this){}的時候,執行緒若處於休眠狀態,會將cpu讓出,讓其他處於就緒狀態的執行緒來執行,yield()也是一樣,但是yield會比比較一下執行緒之間的優先順序,只有比自己優先順序高或者相等的的才有可能獲得cpu的執行權

sleep不會進行比較。

執行緒若是加上了同步鎖,則在這兩種狀態下是不會釋放掉同步鎖的,也就是因為同步鎖的原因即使執行緒此時讓出了cpu的使用權,其他的執行緒由於得不到同步鎖而導致執行緒阻塞無法執行。所以雖然會讓出cpu但是其他的執行緒卻會因為同步鎖的原因而備阻塞住。

join():

主線程/其他執行緒1{

//當程式執行到這一步的時候主線程/其他執行緒1會停止執行而等待

//其它執行緒2,讓它來執行程式,可以傳乙個引數表示主線程/其它執行緒1

//最多可以等待的時間

其它執行緒2.join();

控制線程的常用方法

讓乙個執行緒等待另乙個執行緒完成的方法 例如,main執行緒中呼叫a執行緒的join方法後,那麼在a執行緒結束後,main才會繼續執行 如果還有其他執行緒,其他執行緒與她兩無關 public static void main string args throws interruptedexcepti...

控制線程同步的方法

控制同步的方法 已過時 加鎖 synchronized 互斥鎖 缺點 併發效率低下 synchronized synchronized obj 對obj加鎖的同步 塊 只有拿到obj鎖標記的執行緒,才能進入對obj加鎖的同步 塊 public synchronized void m 對this加鎖的...

控制線程同步的方法

控制同步的方法 已過時 加鎖 synchronized 互斥鎖 缺點 併發效率低下 synchronized synchronized obj 對obj加鎖的同步 塊 只有拿到obj鎖標記的執行緒,才能進入對obj加鎖的同步 塊 public synchronized void m 對this加鎖的...