首页 > 其他分享 >共享锁和排他锁

共享锁和排他锁

时间:2023-12-13 20:02:31浏览次数:18  
标签:Thread 写锁 void 读锁 线程 new 共享

  1. 排它锁

排它锁⼜称独占锁,获得了以后既能读⼜能写,其他没有获得锁的线程不能读也不能写,典型的synchronized就是排它锁

  1. 共享锁

共享锁⼜称读锁,获得了共享锁以后可以查看但⽆法修改和删除数据,其他线程也能获得共享锁,也可以查看但不能修改和删除数据

在没有读写锁之前,我们虽然保证了线程安全,但是也浪费了⼀定的资源,因为多个读操作同时进⾏并

没有线程安全问题

ReentrantReadWriteLock中 读锁就是共享锁,写锁是排它锁,在读的地⽅使⽤读锁,在写的地⽅使⽤

写锁,灵活控制,如果不这样,读是⽆限阻塞的,这样提⾼了程序的执⾏效率

1.3 读写锁的规则

多个线程只申请读锁,都能申请到如果有⼀个线程已经占⽤了读锁,则此时其他线程如果要申请写锁,则申请写锁的线程会⼀直等待释放

该锁,如果有⼀个线程已经占⽤ 写锁,则其他线程申请写锁或读锁都要等待它释放,也就是说,要么多读,要么⼀写

下⾯的示例让两个线程去读,两个线程去写,使⽤读写锁读的线程是同时进⾏的,⽽写的线程等读的线程执⾏完再依次执⾏

package org.example.c4;

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class RWLock {
 private static ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
 //读锁
 private static ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();
 //写锁
 private static ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.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(new Runnable() {
   @Override
   public void run() {

    read();
   }
  }, "t1").start();
  new Thread(new Runnable() {
   @Override
   public void run() {
    read();
   }
  }, "t2").start();
  new Thread(new Runnable() {
   @Override
   public void run() {
    write();
   }
  }, "t3").start();
  new Thread(new Runnable() {
   @Override
   public void run() {
    write();
   }
  }, "t4").start();
 }
}

标签:Thread,写锁,void,读锁,线程,new,共享
From: https://www.cnblogs.com/lin513/p/17899810.html

相关文章

  • 保姆级教程利用免费内网穿透工具快速实现远程访问SMB文件共享
    当你需要在远程网络中访问SMB(ServerMessageBlock)共享资源时,你可以使用Solopace.Gem来建立安全且便捷的连接。Solopace.Gem是一款专为远程访问和网络连接而设计的工具,它能够轻松地穿越NAT(网络地址转换)和防火墙,如果运营商的防火墙让你能够安全地远程访问SMB共享文件夹。本教程将指......
  • 共享智能指针
    文章参考:爱编程的大丙(subingwen.cn)所谓智能指针,其实就是C++11封装的类,里面存有一个正常指针,智能指针会通过这个正常指针,来监视指针指向的内存,当没有智能指针指向该内存时,该内存就被释放。其核心在于引用计数,每一个智能指针指向内存A,智能指针内部的引用计数就加一。每析构一......
  • Samba共享服务搭建
    环境准备主机IPRocky_Linux(samba服务器)192.168.3.1/24windows11(客户端)192.168.3.25/24安装服务dnfisntallsamba-y修改配置创建共享目录登录用户useradd-M-s/sbin/nologinqclrecho123|passwd--stdinqclrmkdir/opt/qclrchown-Rqclr:qclrqclr/smbpasswd-aqclr......
  • 智能监控平台/视频共享融合系统EasyCVR接入大华SDK后只有一路通道可云台控制该如何解
    TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,包括对人、车、......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.11)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......
  • DMA-BUF缓冲区共享和同步【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/dma-buf.html#DMA-BUF缓冲区共享和同步DMA-BUF子系统提供了一个框架,用于在多个设备驱动程序和子系统之间共享硬件(DMA)访问的缓冲区,并用于同步异步硬件访问。例如,drm的“prime”多GPU支持就使用了这个框架,但当然不仅限于GPU的......
  • 共享存储NFS
    什么是共享存储networkfilesystem网络文件系统NFS主要使用在局域网下,让不同的主机之间可以共享文件、或者目录数据主要用于linux系统上实现文件共享的一种协议,其客户端主要是Linux没有用户认证机制,且数据在网络上传送的时候是明文传送,一般只能在局域网中使用不需要输......
  • VMware17 ubuntu18.04.5安装好后无法访问win11共享文件夹的问题
    1在关闭虚拟机的情况下,点击虚拟机设置,CD/DVD设置使用ISO镜像文件,并设置好镜像路径。2启动虚拟机,此时重新安装VMwaretools按钮变成有效状态,点击该按钮,如果虚拟机进入系统后,该按钮会变成无效状态。3等待虚拟机自动下载VMwaretools,下载后在桌面可以看到VMwaretoolsDVD光盘,......
  • 【环境配置记录】ubuntu用samba共享文件夹给windows
    中文社区真的不太行,英文社区资源丰富很多转载https://askubuntu.com/questions/1462387/trying-to-samba-share-a-folder-always-gives-errors的答案 Pleaseseethefollowinginstallationguideline.Itcaneffectivelysolvetheoutstandingissueof'netusershare'r......
  • 共享式以太网采用总线型拓扑结构通信方式简介
    共享式以太网是早期局域网的主要形式,它主要采用总线型拓扑结构进行通信。在这种结构中,所有的站点都通过相应的硬件接口直接连接到一条共享的通信介质上。这条通信介质通常为同轴电缆,各个站点能被所有其他的站点接收。在通信方式上,共享式以太网主要采用CSMA/CD(CarrierSenseMultipl......