共享锁和排它锁

共享锁和排它锁

以 ReentranReadWriteLock 读写锁为例java

什么是共享锁和排它锁

排它锁,又称独占锁,独享锁 synchronized就是一个排它锁安全

共享锁,又称为读锁,得到共享锁后,能够查看,但没法删除和修改数 据, 其余线程此时业获取到共享锁,也能够查看可是 没法修改和 删除数据ide

共享锁和排它锁典型是ReentranReadWriteLock 其中,读锁是共享锁,写锁是 排它锁ui

读写锁的做用

在没有读写锁以前,咱们使用的是ReentrantLock ,虽然咱们保证了线程安全,,可是业浪费了必定的资源,多个读操做同时进行,是不会出现线程安全问题spa

读写锁的规则

读写锁只是一把锁,能够经过2种方式锁定,读锁定和写锁定线程

多个线程取请求读锁,均可以请求到的 若是一个线程获取到了读锁,其余线程须要写锁,申请的写锁必须得等读锁释放 总结 :要么多读,要么一写,两者不可共存设计

ReentranReadWriteLock 具体用法

上代码code

package com.yxl.po;

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class a {

   //建立读写锁
   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 (Exception e){

       }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 (Exception e){

       }finally {
           System.out.println(Thread.currentThread().getName()+"释放写锁");
           writeLock.unlock();
       }
   }

   public static void main(String[] args) {
       new Thread(()->read(),"T1").start();
       new Thread(()->read(),"T2").start();
       new Thread(()->write(),"T3").start();
       new Thread(()->write(),"T4").start();
   }


}

图片

从运行结果能够、看到 读锁 线程1 和 2 均可以一块儿获取到 而写锁必须得获取释放,下一个线程才能获取orm

读锁和写锁的交互方式

插队: 不容许读锁插队 升降级 容许降级,不容许升级,blog

是不是公平策略 ,和 ReentranLock 同样 传入true ,false

图片底层设计思路和ReentranLock 同样

图片

公平锁:不容许插队 非公平锁:写锁能够随时插队 读锁仅在等待队列头节点不是想获取写锁到时候能够插队

相关文章
相关标签/搜索