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.lock() :獲取鎖,會不停的獲取,產生阻塞,已經被中斷,但還會繼續獲取lock.trylock() : 嘗試去獲取空閒的鎖,如果有返回true,沒有返回false;
lock.trylock(time,型別) 獲取最大這個時間之後,如果 time之後還未獲取到鎖,會丟擲異常 interruptedexception
lock.lockinterruptibly 獲取鎖,如果已經中斷了,停止,lockinterruptibly()和上面lock是一樣的
多執行緒之可重入鎖
當乙個執行緒得到物件鎖後,再次請求此物件鎖時是可以再次得到改物件的鎖的 可重入鎖 的概念 自己可以再次獲得自己內部的鎖,比如有一條執行緒獲得了某個物件的鎖,此時這個物件的鎖還沒有釋放,當再次獲取這個物件的鎖的時候還是可以獲取的,如果不可鎖重入的話就會造成死鎖。例如 synchronized和reen...
多執行緒四 可重入鎖
自己可以再次獲取自己的內部鎖。比如有1調執行緒獲得了某個物件的鎖,此時這個物件鎖還沒有釋放,當其再次想要獲取這個物件的鎖的時候還是可以獲取的,如果不可鎖重入的話,就會造成死鎖。可重入鎖也支援在父類繼承的環境中。即子類鎖中呼叫了父類帶鎖函式 普通可重入鎖示例 public class service ...
Java之多執行緒之鎖重入
一 什麼叫鎖重入 1.在多執行緒同步中,使用synchronized進行同步處理時,會對物件加鎖處理,啟用物件的互斥唯一性。2.在乙個執行緒執行到同步 並獲得物件的鎖時,如果在該同步 內部又繼續呼叫了本類的其他同步方法,也可以執行 這就表明了鎖重入。3。當乙個執行緒得到乙個物件的鎖後,再次請求該物件...