java 多執行緒 可重入鎖RentrantLock

2021-09-24 22:51:57 字數 1258 閱讀 5877

1.業務場景,實現乙個排隊功能,比如 1,2,3   執行完成之後,重新從1,2,3 繼續執行下去

public static void main(string args) 

}}).start();

new thread(new runnable()

}}).start();

new thread(new runnable()

}}).start();

}}class business catch (interruptedexception e)

}try catch (interruptedexception e)

system.out.println("----one1");

lockcount = 2;

condition2.signal();

lock.unlock();

}public void one2() catch (interruptedexception e)

}try catch (interruptedexception e)

system.out.println("----one2");

lockcount = 3;

condition3.signal();

lock.unlock();

}public void one3() catch (interruptedexception e)

}try catch (interruptedexception e)

system.out.println("----one3");

lockcount = 1;

condition1.signal();

lock.unlock();

}}

關鍵知識點:

condition  中signal 喚醒乙個在此條件下正在等待的執行緒,signalall 喚醒在此條件下等待的所有執行緒

方法解釋:lock 獲取鎖

lock.trylock() : 嘗試去獲取空閒的鎖,如果有返回true,沒有返回false;

lock.lock() :獲取鎖,會不停的獲取,產生阻塞,已經被中斷,但還會繼續獲取

lock.trylock(time,型別) 獲取最大這個時間之後,如果 time之後還未獲取到鎖,會丟擲異常 interruptedexception

lock.lockinterruptibly  獲取鎖,如果已經中斷了,停止,lockinterruptibly()和上面lock是一樣的

多執行緒之可重入鎖

當乙個執行緒得到物件鎖後,再次請求此物件鎖時是可以再次得到改物件的鎖的 可重入鎖 的概念 自己可以再次獲得自己內部的鎖,比如有一條執行緒獲得了某個物件的鎖,此時這個物件的鎖還沒有釋放,當再次獲取這個物件的鎖的時候還是可以獲取的,如果不可鎖重入的話就會造成死鎖。例如 synchronized和reen...

多執行緒四 可重入鎖

自己可以再次獲取自己的內部鎖。比如有1調執行緒獲得了某個物件的鎖,此時這個物件鎖還沒有釋放,當其再次想要獲取這個物件的鎖的時候還是可以獲取的,如果不可鎖重入的話,就會造成死鎖。可重入鎖也支援在父類繼承的環境中。即子類鎖中呼叫了父類帶鎖函式 普通可重入鎖示例 public class service ...

Java之多執行緒之鎖重入

一 什麼叫鎖重入 1.在多執行緒同步中,使用synchronized進行同步處理時,會對物件加鎖處理,啟用物件的互斥唯一性。2.在乙個執行緒執行到同步 並獲得物件的鎖時,如果在該同步 內部又繼續呼叫了本類的其他同步方法,也可以執行 這就表明了鎖重入。3。當乙個執行緒得到乙個物件的鎖後,再次請求該物件...