javalock
㈠ java Lock鎖為什麼不直接使用
主要為了多線程訪問共享資源時,保證只能有一個線程操作資源,比如說一個servlet中對根據參數 一個公共變數設置值 ,如果不採用lock那麼在並發訪問時就無法保證每個線程中公共變數設置的值都是各自線程的,在後續的應用中變數的值可能會錯亂,加了lock之後就保證了在一個線程中從頭到尾都是一致的
㈡ Java中lock類該怎麼用啊可以完全代替synchronize嗎
1、上鎖(漂亮的寫法是先判斷是否鎖被佔用)
2、你要執行的命令(比如讀取io和資料庫 釋放相關資源)
3、釋放鎖
然後別的地方就是重復以上三步的過程
synchronize就是把1和3替換成了{ }
完全替代到不一定 畢竟synchronize使用起來簡單明了
㈢ 請問java中的lock和synchronized區別是什麼
lock(), 如果獲取了鎖立即返回,如果別的線程持有鎖,當前線程則一直處於休眠狀態,直到獲取鎖
synchronized是在JVM層面上實現的,不但可以通過一些監控工具監控synchronized的鎖定,而且在代碼執行時出現異常,JVM會自動釋放鎖定,但是使用Lock則不行,lock是通過代碼實現的,要保證鎖定一定會被釋放,就必須將unLock()放到finally{}中
㈣ java中juc使用lock鎖可以實現精準喚醒,但這樣的話和單線程指定順序執行有什麼區別呢
為什麼用鎖,肯定是多個進程同事訪問,餵了確保數據一致性,才會加鎖,確保同一時間只能有一個進程獲取鎖。你說的單線程制定順序執行是什麼意思沒太懂,或許應該是多線程情況下,你制定一個隊列,保證他們順序執行。
使用lock實現精準喚醒是相對於synchronize而言的,使用synchronized鎖鎖定代碼塊或者方法,自動加鎖,運行完自動釋放鎖;用RetrantLock重入鎖,可以在方法內精確加鎖解鎖,也可以針對某個鎖實現喚醒,注意方法內加幾個鎖就要解幾個鎖
㈤ java的Lock和Condition問題
1、Condition並非監控器(wait,notify, andnotifyAll這類是),針對重入鎖它是同步對象的一個屬性的存在,是輔助線程增加其更細粒度控制的一個工具,當線程獲得執行的臨界權後如果Condition不滿足仍然不會執行。
2、以上僅是簡單的闡述,詳細說明可以參考oracle官方的API文檔ReentrantLock Condition
㈥ java synchronized和lock的區別
兩者區別:1.synchronized是java內置關鍵字,在jvm層面,Lock是java類;
2.synchronized無法判斷是否獲取鎖的狀態,Lock可以判斷是否獲取到鎖;
3.synchronized會自動釋放鎖(a 線程執行完同步代碼會釋放鎖 ;b 線程執行過程中發生異常會釋放鎖),Lock需在finally中手工釋放鎖(unlock()方法釋放鎖),否則容易造成線程死鎖;
4.用synchronized關鍵字的兩個線程1和線程2,如果當前線程1獲得鎖,線程2線程等待。如果線程1阻塞,線程2則會一直等待下去,而Lock鎖就不一定會等待下去,如果嘗試獲取不到鎖,線程可以不用一直等待就結束了;
5.synchronized的鎖可重入、不可中斷、非公平,而Lock鎖可重入、可判斷、可公平
6.Lock鎖適合大量同步的代碼的同步問題,synchronized鎖適合代碼少量的同步問題。
7.Lock是一個介面,synchronized是一個關鍵字,synchronized放棄鎖只有兩種情況:①線程執行完了同步代碼塊的內容②發生異常;而lock不同,它可以設定超時時間,也就是說他可以在獲取鎖時便設定超時時間,如果在你設定的時間內它還沒有獲取到鎖,那麼它會放棄獲取鎖然後響應放棄操作。
你明白了嗎?
㈦ java中的lock鎖,多次獲得,只unlock一次,會有什麼效果
摘要 Lock鎖介紹:
㈧ Java中Lock和LockSupport的區別到底是什麼
主要相同點:Lock能完成synchronized所實現的所有功能
主要不同點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放,並且必須在finally從句中釋放。
㈨ java並發lock為什麼起到鎖的效果
鎖(lock)
邏輯上鎖是對象內存堆中頭部的一部分數據。JVM中的每個對象都有一個鎖(或互斥鎖),任何程序都可以使用它來協調對對象的多線程訪問。如果任何線程想要訪問該對象的實例變數,那麼線程必須擁有該對象的鎖(在鎖內存區域設置一些標志)。所有其他的線程試圖訪問該對象的變數必須等到擁有該對象的鎖有的線程釋放鎖(改變標記)。
一旦線程擁有一個鎖,它可以多次請求相同的鎖,但是在其他線程能夠使用這個對象之前必須釋放相同數量的鎖。如果一個線程請求一個對象的鎖三次,如果別的線程想擁有該對象的鎖,那麼之前線程需要 「釋放」三次鎖。
監視器(Monitor)
監視器是一中同步結構,它允許線程同時互斥(使用鎖)和協作,即使用等待集(wait-set)使線程等待某些條件為真的能力。