首页 > 编程语言 >java中的锁

java中的锁

时间:2022-10-14 21:25:27浏览次数:88  
标签:java 独占 互斥 读锁 线程 共享 数据




某个线程是否锁住同步资源

  • 悲观锁每次拿资源时候都认为会有人修改,在读数据的时候都会上锁,其他线程就会阻塞直到拿到锁。
  • 乐观锁是每次拿到数据的时候,都假设别人不会修改,都不会上锁。只有在更新数据的时候,去判断之前有没有线程更新了这个数据。如果这个数据没有更新过。当前线程就会将自己修改的线程成功写入。如果当前数据已经被更新了,当前线程要么自动重试,要么报错。

多个线程是否共享一把锁

  • 共享锁是指锁可以被多个线程持有,如果一个线程对数据加共享锁之后,那么其他线程只能对数据加共享锁,不能加独占锁。获得共享锁,只能读不能修改数据。JDK中,ReentrantReadWriteLock就是一种共享锁。
  • 独占锁指锁一次只能被一个线程所持有。如果一个线程对数据加排他锁后,该线程可以对数据读和写,其他线程不能对他进行任何操作。 JDK中的synchronizedJUC包中的Lock实现类都是独占锁。
  • 互斥锁是独占锁的一种形式。指一个资源同时只允许一个访问者对他进行访问。具有唯一性和排他性。互斥锁一次只能有一个线程拥有互斥锁。其他线程只能等待。
  • 读写锁是共享锁的一种具体体现,读写锁是管理一组锁,一个是只读的锁,一个是只写的锁,读锁在没写锁的时候被多个线程持有,写锁只能是独占的。写锁的优先级要高于读锁,一个获取了读锁的线程,一定要能看见前一个写锁更新的内容。读写锁相比于互斥锁并发的程度更高。
    JDK源码中定义读写锁接口ReadWriteLock。ReentrantReadWriteLock实现上述接口,支持锁降级不支持锁升级,可以由写锁降级为读锁。

转载:https://www.bilibili.com/video/BV1ug411a7Jb/?vd_source=46d50b5d646b50dcb2a208d3946b1598

标签:java,独占,互斥,读锁,线程,共享,数据
From: https://www.cnblogs.com/chenyi502/p/16793045.html

相关文章

  • jmeter执行报错:java.lang.UnsupportedClassVersionError解决办法
    做个记录。问题记录:jmeter版本:5.4.1本地Java版本:1.8.0_151执行jmeter,报错:  2022-10-1412:06:27,372ERRORo.a.j.JMeter:Uncaughtexceptionint......
  • Java----实现多线程(初识)
    Java----实现多线程(初识)进程:正在运行的程序是系统进行分配和调用资源的独立单位每一个进程都有他自己的内存空间和系统资源线程:是进程中的单个顺序控制流,是一条执行......
  • Java----线程同步
    Java----线程同步案例:卖票要求:某电影院正在上映国产大片,它有100张票,而该电影院有三个窗口卖票,请设计一个程序模拟该电影院卖票思路:①定义一个类SellTicket来实现Runna......
  • 反转数组(Java数组)
    publicclasstest{publicstaticvoidmain(String[]args){//反转数组int[]arrays={1,2,3,4,5};int[]result=newint[arrays.length];......
  • Design Patterns in JavaScript Constructor, Factory, & Abstract Factory Creationa
    <html><body><h1>DesignPatternsinJavaScriptConstructor,Factory,&AbstractFactoryCreationalPatterns</h1><scripttype="text/javas......
  • 解决Project facet Java version 11 is not supported.问题
    出现该提示说明项目是其他版本jdk编译的,在eclipse里运行时会报版本不支持。解决方法:首先查看本机电脑的jdk版本(cmd→Java-version),然后选中项目Properties,选择Projec......
  • Java8新特性之Stream流(含具体案例)
    一、概述  Stream流是Java8新提供给开发者的一组操作集合的API,将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选、排序、聚......
  • java中的稀疏数组
    Java的稀疏数组本节内容的主要需要注意的是数组转换时的下标packagearray;​publicclassArrayDemo06{  //创建一个二维数组11*110:没有旗子1:黑棋2:白棋......
  • Elasticsearch——java api构建搜索
    版本不同版本的elasticsearch-rest-high-level-client和elasticsearch之间存在兼容风险,请确保和elasticsearch版本一致,否则会出现无法预计的错误。es配置maven依赖<dep......
  • Elasticsearch——JavaApi实现索引管理
    版本不同版本的elasticsearch-rest-high-level-client和elasticsearch之间存在兼容风险,请确保和elasticsearch版本一致,否则会出现无法预计的错误。es配置maven依赖<dep......