详解JUC之锁——概述(01)_juc锁的概念-程序员宅基地

技术标签:   同步锁  线程  java  juc  

前言

详解JUC之原子类使用及实现中,我介绍了一下JUC中的原子类的使用和实现,现在我就来介绍一下JUC的重磅武器——锁(Lock)

同步锁

在说JUC中的锁之前,得先说一下它们的前辈——同步锁,有对比才有伤害嘛~

同步锁的概念是,不同的线程可以访问一个同步锁,但是在同一个时间点,这个同步锁只能被一个线程获取,而想要却得不到它的线程就必须等待了,直到获取到它才能继续运行。

Java是通过synchronized关键字来进行同步的,实现对竞争资源的互斥访问,这个玩意可以说是元老级别的了。既然是元老级别的古董,如果不与时俱进的话就会有些不合现代人的口味。大家通常对它的诟病是,一是它的功能太单一,二是这个号称重量级锁的东西效率低下(这个在Java 6后还是别这么说了)。

关于性能方面,在Java 6中对synchronized的内在机制进行了大量优化了,加入了CAS,轻量级锁和偏向锁等玩意,让它不是一上来就是一个重量级锁,而是随着并发程度的改变而进行相应的膨张,关于这个可以看Java锁的膨胀过程和优化

说了这么多,就是为了让你知道,以后别人问你synchronized的同步锁和JUC中的锁的差别时,你不要抓住性能不放了,它差的只是更灵活的功能。

JUC中的锁

JUC中的锁比synchronized倒是年轻了不少,它是在Java 5才出现的,所谓“长江后浪推前浪,前浪死在沙滩上”。相比同步锁,JUC包中的锁的功能更加强大,它提供了各种各样的锁(公平锁,非公平锁,共享锁,独占锁……),所以使用起来很灵活。当然了,有得必有失,既然功能多了,用法肯定更难了。

JUC锁及相关的类和接口大多都在java.util.concurrent.locks,当然还有三个类CountDownLatchCyclicBarrierSemaphorejava.util.concurrent,这个三个类一般被认为是并发工具类,尽管它们没有实现Lock接口,但我还是倾向于把它们看做锁,所以在后面也会介绍它们。

java.util.concurrent.locks包下有这些类和接口,也不是很多,在后面文章我会一一介绍。

接口

  • Condition
  • Lock
  • ReadWriteLock

  • AbstractOwnableSynchronizer
  • AbstractQueuedLongSynchronizer
  • AbstractQueuedSynchronizer
  • LockSupport
  • ReentrantLock
  • ReentrantReadWriteLock
  • ReentrantReadWriteLock.ReadLock
  • ReentrantReadWriteLock.WriteLock
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TimHeath/article/details/71601562

智能推荐

西湖奇缘(小品)-程序员宅基地

文章浏览阅读588次。小青(男扮女),白娘子,许仙,路人甲(程序员),法海背景西湖,断桥,远处是雷峰塔白娘子在前,小青紧跟其后,从舞台左侧上台。白娘子望着远处的断桥,面向观众说。白娘子:小青你..._小品背景 西湖

【python】结巴分词案例(英文词组识别)_jieba分词过滤掉不正确的英文拼写-程序员宅基地

文章浏览阅读9.3k次,点赞14次,收藏30次。本人菜鸡一只,今天来写写结巴分词!哇,距离上一次写文章已经20天过去了,最近这些天还真是挺忙的,主要是上上周到了跑月数据的节点,然后上周原始数据出了问题,我调了一周多才把这个错误解决了,还修复了一个隐藏的小bug在这里提醒下自己,用任何表在做关联的时候一定要好好检查,关联键是不是唯一的,否则会数据倍增!!其实在这一段时间里,还是有一点点自己学习的。首先整理了ES的一些API,还..._jieba分词过滤掉不正确的英文拼写

混合线性规划-求解VRPTW问题(pyomo-glpk)_混合线性规划-求解vrptw问题(pyomo-glpk)-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏13次。此篇是应用在物流线路规划中,用的pyomo进行建模,glpk线性求解器进行求解,均为开源,比较适合大部分人使用;在数据处理阶段因为保密性原因需大家自行模拟数据进行测试,如有什么问题可留言,看到后会尽量给大家解决_混合线性规划-求解vrptw问题(pyomo-glpk)

Java 后端处理字符串出现 空格 截断 字符串拼接成url后 url被截断问题 在拼接的地方参数被截断_url 带空格自动为什么会自动截取-程序员宅基地

文章浏览阅读940次。Java 后端处理字符串出现 空格 截断 字符串拼接成url后 url被截断问题 在拼接的地方参数被截断Java 后端处理字符串出现 空格 截断 字符串拼接成url后 url被截断问题 在拼接的地方参数被截断解决方案Java 后端处理字符串出现 空格 截断 字符串拼接成url后 url被截断问题 在拼接的地方参数被截断刚好在写一个接口的时候,出现一个问题!后端接口需要将拼接好的url返回给前端,但是前端拿到url字符串后出现 莫名其妙的空格,但是用空字符串替换还是有问题将字符串进行ur_url 带空格自动为什么会自动截取

Hadoop_如何在hdfs造大小的文件-程序员宅基地

文章浏览阅读365次。HDFS优缺点1、高容错性数据自动保存多个副本,它通过增加副本的形式,提高容错性某一个副本丢失以后,它可以自动恢复2、适合处理大数据数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据;文件规模:能够处理百万规模以上的文件数量,数量相当之大3、可以构建在廉价的机器上,通过多副本机制,提高可靠性HDFS缺点1、不适合低延时数据访问,比如毫秒级的存在数据,是做不到的2、无法搞效的对大量小文件进行存储①存储大量小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息。_如何在hdfs造大小的文件

Minicom的配置以及使用_linux minicom配置后为什么每次链接都要在重新-程序员宅基地

文章浏览阅读1.7k次。1、在使用minicom之前,首先要保证你对串口有读/写的权限。我们知道,Linux的设备对应于/dev/目录中的某个文件,串口COM1对应ttyS0,COM2对应ttyS1,串口转USB对应ttyUSBx,使用以下命令来查看你对ttyUSB0的权限:$ ls -l /dev/ttyUSB0crwxrwxrwx 1 root dialout 188, ..._linux minicom配置后为什么每次链接都要在重新

随便推点

关于torch.gather(input, dim, index)_torch.gather(input,dim,index)-程序员宅基地

文章浏览阅读254次。torch.gather()函数可以理解为根据索引和维度来求张量中对应的数,最后得到的是一个shape和index相同的张量即“以A = B.gather(dim=0, index=torch.tensor([[2, 1, 2]]))为例,(index维度可以是任意的维度,不要受限于B),即A的维度为(1,3);其次dim=0代表按列索引,那么index第一个元素“2”的含义为在B中其所在列(即第0列)的第2个元素。同理,index第二个元素“1”的含义为在B中其所在列(即第1列)的第1个元素;_torch.gather(input,dim,index)

BeanUtils中copyProperties的使用_hutool beanutil.copyproperties-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏4次。Java copyProperties拷贝工具类的使用前几天优化代码时,目光停在了copyProperties上。因为我在正式转历史时可以较明显的但觉到卡顿。我原本使用的是org.apache.commons.beanutils。但是众所周知的commons系列的突出问题其一,就是著名的BeanUtils.copyProperties性能问题。经过了解后,我盯上了Hutool。在我个人看来,对于copyProperties性能问题,Hutool还是有一定自己的强处。特此分享一下我的使用过程和心得体会。_hutool beanutil.copyproperties

uniapp 自定义TabBar 组件_uniapp tabbar宽度-程序员宅基地

文章浏览阅读1.2k次。uniapp 自定义TabBar 组件_uniapp tabbar宽度

SpringBoot整合EasyExcel二级分类_java easyexcel 分组汇总-程序员宅基地

文章浏览阅读744次。一、Excel导入导出的应用场景1、数据导入:减轻录入工作量2、数据导出:统计信息归档3、数据传输:异构系统之间数据传输二、EasyExcel简介1、EasyExcel特点Java领域解析、生成Excel比较有名的框架有Apachepoi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的fullgc。EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能_java easyexcel 分组汇总

纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception_squeezenet mobilenet-程序员宅基地

文章浏览阅读278次。摘要:本文就近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet、MobileNet、ShuffleNet、Xception。_squeezenet mobilenet

C++ STL 知识点总结_stl知乎-程序员宅基地

文章浏览阅读4.9k次,点赞66次,收藏275次。概述简介简单介绍:C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈等。STL的一个重要特点就是数据结构和算法的分离。例如,STL中sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。STL另一个重要特性是它不是面向对象的,主要依赖于..._stl知乎

推荐文章

热门文章

相关标签