国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術文章
文章詳情頁

java - lock與synchronize的解鎖順序問題?

瀏覽:124日期:2024-01-29 17:26:50

問題描述

在學習lock與synchronize的區別時,看到這樣一句話:“ lock更靈活,可以自由定義多把鎖的枷鎖解鎖順序(synchronized要按照先加的后解順序)”。請問這里:

1.lock的自由定義多把鎖的枷鎖解鎖順序怎么理解?2.synchronized要按照先加的后解順序怎么理解?

謝謝各位!

問題解答

回答1:

Lock是一個接口,最常用的實現是 ReentrantLock,它的一個靈活之處是可以設定fair參數。

synchronized 和fair=false的ReentrantLock 無法決定加鎖順序。換句話說,線程A、B、C都要鎖定對象,嘗試鎖定的時間是A最早、然后是B,最后是C,那么當A解鎖對象時,不能確定到底B還是C接下來鎖定對象。

如果用fair=true的ReentrantLock(公平鎖),情況就確定了:A解鎖對象時,由于B比C先嘗試鎖定對象,所以接下來一定是B來鎖定,只有當B解鎖時才輪到C。

回答2:

new lock1new lock2lock1.lock();lock2.lock();...lock2.unlock();lock1.unlock();

Lock的加解鎖是在java語義層面上實現的,鎖之間沒有必然關系

synchronized(obj1){ synchronized(obj2){... }}

synchronized加解鎖是由JVM來實現,在執行完synchronized塊后自行解鎖,所有會按照synchronized的嵌套順序解鎖。

標簽: java
相關文章:
主站蜘蛛池模板: 昭平县| 仪陇县| 广昌县| 贺兰县| 秦皇岛市| 嵊泗县| 阳泉市| 旬邑县| 新巴尔虎右旗| 思南县| 毕节市| 视频| 定襄县| 中阳县| 行唐县| 高邑县| 南澳县| 灵山县| 乌恰县| 名山县| 邹平县| 中西区| 安宁市| 八宿县| 渭源县| 曲周县| 沙雅县| 勃利县| 绵阳市| 临沧市| 定陶县| 稷山县| 肇东市| 红安县| 南丰县| 延安市| 清远市| 同仁县| 株洲市| 甘谷县| 庐江县|