日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

共享锁和排它锁的用法

發布時間:2024/4/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 共享锁和排它锁的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

共享鎖和排它鎖

  • 排它鎖,又稱為獨占鎖、獨享鎖
  • 共享鎖,又稱為讀鎖,獲得共享鎖之后,可以查看但無法修改和刪除數據,其他線程此時也可以獲取到共享鎖,也可以查看,但無法修改和刪除數據
  • 共享鎖和排它鎖的典型是讀寫鎖ReentrantReadWriteLock,其中讀鎖是共享鎖,寫鎖是排它鎖

讀寫鎖的作用

  • 在沒有讀寫鎖之前,我們設定使用ReentrantLock,那么雖然我們保證了線程安全,但是也浪費了資源:多個讀操作同時進行,并沒有線程安全問題
  • 在讀的地方使用讀鎖,在寫的地方使用寫鎖,靈活控制,如果沒有寫鎖的情況下,讀是無阻塞的,提高了程序的執行效率

讀寫鎖的規則

  • 多個線程只申請讀鎖,都可以申請到
  • 如果有一個線程已經占用了讀鎖,則此時其他線程如果要申請寫鎖,則申請寫鎖的線程會一直等待釋放讀鎖
  • 如果有一個線程已經占用了寫鎖,則此時其他線程如果申請寫鎖或者讀鎖,則申請的線程會一直等待釋放寫鎖
  • 一句話總結:要么是一個或多個線程同時有讀鎖,要么是一個線程有寫鎖,但是兩者不會同時出現
  • 換一種思路更容易理解:讀寫鎖只是一把鎖,可以通過兩種方式鎖定:讀鎖定和寫鎖定。讀寫鎖可以同時被一個或多個線程讀鎖定,也可以被單一線程寫鎖定。但是永遠不能同時對這把鎖進行讀鎖定和寫鎖定

package lock.readwrite;import java.util.concurrent.locks.ReentrantReadWriteLock;public class CinemaReadWrite {private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock();private static ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();private static ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();private static void read() {readLock.lock();try {System.out.println(Thread.currentThread().getName() + "得到了讀鎖,正在讀取");Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} finally {System.out.println(Thread.currentThread().getName() + "釋放讀鎖");readLock.unlock();}}private static void write() {writeLock.lock();try {System.out.println(Thread.currentThread().getName() + "得到了寫鎖,正在寫入");Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} finally {System.out.println(Thread.currentThread().getName() + "釋放寫鎖");writeLock.unlock();}}public static void main(String[] args) {new Thread(()->read(),"Thread1").start();new Thread(()->read(),"Thread2").start();new Thread(()->write(),"Thread3").start();new Thread(()->write(),"Thread4").start();} }

?

總結

以上是生活随笔為你收集整理的共享锁和排它锁的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。