Java中的鎖的概念挺多,從思想的角度,分為通過各種鎖。下面可以讓我們來分別進行認識了解一下對于他們。
我們一般用的都是可重入鎖。可重入鎖定裝置,當一個執行緒獲取鎖,如果重新獲得鎖,它仍然可以得到。
而不可重入鎖,指的是當一個執行緒獲取到自己一個鎖后,如果學生再次進行獲取社會這個鎖的話,就不能再獲取到了。不可重入鎖會導致死鎖,所以需要我們國家一般是不會通過使用程序中不可重入鎖的。
公平鎖、非公平鎖
AQS框架可以實作公平鎖和非公平鎖。 AQS框架包含三個主要元素,一個是狀態狀態,用來表示鎖是否被占用,另一個是當前執行緒,最后一個是保存被阻塞執行緒的佇列。
如果用于保存被阻塞執行緒的佇列按順序獲取鎖,并且佇列的第一個執行緒首先獲取鎖,那么這是一個公平的鎖,每個執行緒可以按照它進入佇列的順序獲取鎖。
如果一個執行緒被阻塞,以節省排隊不是為了得到一個鎖,但大家爭相鎖,這個鎖是不公平的,這可能會導致某些執行緒都不能獲得鎖被餓死。
悲觀鎖,樂觀鎖,自旋鎖
悲觀鎖和樂觀鎖也是作為一種具有不同文化維度的鎖的思想。
悲觀鎖指的是在執行操作之前進行鎖定,以確保只有獲得鎖的執行緒才能執行。 在這種情況下,由于鎖定操作,效率可能較低,但確保安全。 像synchronized和Reentrant Lock一樣是悲觀鎖。
樂觀鎖不是在執行前鎖定,而是在執行時判斷,如 cas 是典型的樂觀鎖。在執行時,將執行緒作業記憶體與最新資料進行比較,如果是更新前的最新資料,如果不是最新資料,則作業執行緒記憶體中的資料已過期,則開發人員將處理該資料。
提到CAS,可能會覺得自旋鎖的。輕量級鎖不同步CAS是使用自旋鎖模式么。在這里,我們有很好的概念,CAS和旋轉來區分。 CAS是一個比較和交換,也就是,比較和交流。這是一個操作,比較和交換操作。自旋是指執行相同的操作多次。他們是兩個不同的概念。指自旋鎖自旋的方式與CAS操作進行數次。因此,CAS是樂觀鎖,并多次CAS,也就是樂觀鎖的實施,就變成了自旋鎖倍。
獨占鎖、共享鎖
獨占鎖、共享鎖也是一個思想進行成本的概念。
只有一個執行緒能夠擁有該鎖獨占鎖裝置以執行相應的操作。例如:同步和的ReentrantLock,以及寫鎖定讀寫鎖。
共享鎖指的是企業可以有多個執行緒同時我們擁有自己這個鎖。比如:讀寫鎖中的讀鎖,是允許使用多個執行緒一同獲取到的。還有Semaphore(信號量),因為他們允許存在多個執行緒需要通過,所以發展也是一個共享鎖。
總結
這么多鎖的概念是從不同維度對鎖進行分類。 這些都是概念性的東西,可以用不同的方式實作。
這些鎖本質上是一個框架,其功能是允許一個或多個執行緒在正確的時間執行,而另一個或其他執行緒阻塞。Java 并發庫中的鎖,哪個執行緒要執行,哪個執行緒要阻塞,由基于共享變數和鎖支持的 aqs 確定。
是的,鎖被用來控制一個執行緒被阻塞框架和實施。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/20883.html
標籤:Java相關
