- 浏览: 42956 次
- 性别:
- 来自: 广州
文章分类
最新评论
Lock
Java 语言内置了锁定工具 —— synchronized
关键字。当线程获得监视器时(内置锁定),其他线程如果试图获得相同锁定,那么它们将被阻塞,直到第一个线程释放该锁定。同步还确保随后获得相同锁定的线程可以看到之前的线程在具有该锁定时所修改的变量的值,从而确保如果类正确地同步了共享状态的访问权,那么线程将不会看到变量的“失效”值,这是缓存或编译器优化的结果。
虽然同步没有什么问题,但它有一些限制,在一些高级应用程序中会造成不便。Lock
接口将内置监视器锁定的锁定行为普遍化,允许多个锁定实现,同时提供一些内置锁定缺少的功能,如计时的等待、可中断的等待、锁定轮询、每个锁定有多个条件等待集合以及无阻塞结构的锁定。
interface Lock { void lock(); void lockInterruptibly() throws IE; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws IE; void unlock(); Condition newCondition() throws UnsupportedOperationException; }
ReentrantLock
是具有与隐式监视器锁定(使用 synchronized 方法和语句访问)相同的基本行为和语义的 Lock 的实现,但它具有扩展的能力。
作为额外收获,在竞争条件下,ReentrantLock
的实现要比现在的 synchronized 实现更具有可伸缩性。(有可能在 JVM 的将来版本中改进 synchronized 的竞争性能。)这意味着当许多线程都竞争相同锁定时,使用 ReentrantLock
的吞吐量通常要比 synchronized
好。换句话说,当许多线程试图访问 ReentrantLock
保护的共享资源时,JVM 将花费较少的时间来调度线程,而用更多个时间执行线程。
虽然 ReentrantLock
类有许多优点,但是与同步相比,它有一个主要缺点 —— 它可能忘记释放锁定。建议当获得和释放ReentrantLock
时使用下列结构:
Lock lock = new ReentrantLock(); ... lock.lock(); try { // perform operations protected by lock } catch(Exception ex) { // restore invariants } finally { lock.unlock(); }
因为锁定失误(忘记释放锁定)的风险,所以对于基本锁定,强烈建议您继续使用 synchronized
,除非真的需要 ReentrantLock
额外的灵活性和可伸缩性。ReentrantLock
是用于高级应用程序的高级工具 —— 有时需要,但有时用原来的方法就很好。
Condition
就像 Lock
接口是同步的具体化,Condition
接口是 Object
中 wait()
和 notify()
方法的具体化。Lock
中的一个方法是newCondition()
,它要求锁定向该锁定返回新的 Condition
对象限制。await()
、signal()
和 signalAll()
方法类似于wait()
、notify()
和 notifyAll()
,但增加了灵活性,每个 Lock
都可以创建多个条件变量。这简化了一些并发算法的实现。
ReadWriteLock
ReentrantLock
实现的锁定规则非常简单 —— 每当一个线程具有锁定时,其他线程必须等待,直到该锁定可用。有时,当对数据结构的读取通常多于修改时,可以使用更复杂的称为读写锁定的锁定结构,它允许有多个并发读者,同时还允许一个写入者独占锁定。该方法在一般情况下(只读)提供了更大的并发性,同时在必要时仍提供独占访问的安全性。ReadWriteLock
接口和ReentrantReadWriteLock
类提供这种功能 —— 多读者、单写入者锁定规则,可以用这种功能来保护共享的易变资源。
原子变量
即使大多数用户将很少直接使用它们,原子变量类(AtomicInteger
、AtomicLong
、AtomicReference
等等)也有充分理由是最显著的新并发类。这些类公开对 JVM 的低级别改进,允许进行具有高度可伸缩性的原子读-修改-写操作。大多数现代 CPU 都有原子读-修改-写的原语,比如比较并交换(CAS)或加载链接/条件存储(LL/SC)。原子变量类使用硬件提供的最快的并发结构来实现。
许多并发算法都是根据对计数器或数据结构的比较并交换操作来定义的。通过暴露高性能的、高度可伸缩的 CAS 操作(以原子变量的形式),用 Java 语言实现高性能、无等待、无锁定的并发算法已经变得可行。
几乎 java.util.concurrent
中的所有类都是在 ReentrantLock
之上构建的,ReentrantLock
则是在原子变量类的基础上构建的。所以,虽然仅少数并发专家使用原子变量类,但 java.util.concurrent
类的很多可伸缩性改进都是由它们提供的。
原子变量主要用于为原子地更新“热”字段提供有效的、细粒度的方式,“热”字段是指由多个线程频繁访问和更新的字段。另外,原子变量还是计数器或生成序号的自然机制。
发表评论
-
职场观察:高薪需要什么?
2014-04-01 21:07 329http://xjsunjie.blog.51cto.com ... -
毕业五年来的回顾
2014-04-01 20:59 305http://luogangan.blog.51cto.co ... -
深处跳槽热浪中,跳与不跳该如何抉择?
2013-03-20 13:02 618深处跳槽热浪中,跳与不跳该如何抉择? 跳槽有哪些技巧和注意事项 ... -
面试 需要注意三种公司
2013-03-20 12:55 565来源:http://cuisuqiang.iteye.com ... -
面试 需要警惕三个问题
2013-03-20 12:54 524来源:http://cuisuqiang.ite ... -
离职 需要注意三个问题
2013-03-20 12:53 562来源:http://cuisuqiang.ite ... -
最具争议的10个编程观点
2013-02-12 22:21 603你认为最具争议的编程观点是什么?C#专家Jon Skeet曾 ... -
Java枚举的七种常见用法
2013-01-06 12:19 603http://blog.jobbole.com/31597/ ... -
设计高可用和高负载的网站系统
2012-12-10 12:57 540随着网站的运营,用户 ... -
大型互联网网站架构心得
2012-12-10 12:52 600大型互联网网站架构心 ... -
世界最大的PHP站点 Facebook后台技术探秘
2012-12-10 12:49 682在今年举行的Facebook F8开发者大会上,51CTO带您 ... -
为程序员量身定制的12个目标
2012-11-18 15:44 615http://justjavac.iteye.com/b ... -
Java资源同步的方式
2012-10-25 08:30 752前面我们知道syncnized方法可以对一段代码进行资源 ... -
FusionCharts:Div层被Flash遮住
2012-10-20 17:34 621http://www.zihou.me/html/201 ... -
FusionCharts V3图表导出图片和PDF属性说明
2012-10-20 17:29 760http://www.cnblogs.com/ATree/ar ... -
FusionCharts的中文乱码问题
2012-10-20 17:20 638原文地址:http://wangyaobeijing.b ... -
12 个有效的提高编程技能的方法
2012-10-14 19:17 501来源于:http://www.oschina.net/news ... -
JAVA MVC框架性能比较
2012-09-09 17:28 678来源:http://www.blogjava.net/p ... -
Synchronizer 类
2012-09-09 17:26 666Synchronizer 类 Synchroni ... -
CompletionService
2012-09-02 16:44 803CompletionService 将执行服务与类似 Q ...
相关推荐
基于深度学习的单元整合教学策略研究——以“原子结构与元素性质”教学设计为例.pdf
显微镜在电动汽车机械加工中的运用——评《原子力显微镜动力学行为分析》.pdf
新人教版初中化学[中考总复习:构成物质的几种粒子——分子、原子、离子 重点题型巩固练习].doc
物理研究报告性试验报告——氢原子光谱和里德伯常数的测量.doc
粤教九年级化学构成物质的微粒——原子和离子时PPT学习教案.pptx
类似Buckyball分子的新发现——“金原子笼”
高考热点选择题——33同位素、原子结构[精选].doc
正点原子SYSTEM代码(库函数版——基于固件库V3.5.0)
long和double类型操作的非原子性探究(csdn)————程序
CPU运算突破瓶颈的希望——原子级晶体管.pdf
原子物理——量子力学初步教程PPT课件.pptx
通过多线程编程在Java中发现的并发模式和特性——线程、锁、原子等
高中化学原子结构与元素性质——原子结构与元素周期表 同步练习人教版选修三[精选].doc
材料科学基础 第一章第1讲——原子键合.ppt
正点原子imxdownload工具(带源码)
2015秋粤教版化学九上2.3《构成物质的微粒(Ⅱ)——原子和离子》ppt课件
正点原子的迷你开发板,包括原理图、PCB等,已经测试过可用;
正点原子SYSTEM代码(寄存器版——基于固件库V3.5.0)
显微镜在电动汽车动力匹配与整体优化中运用——评《基于原子力显微镜的纳米机械加工与检测技术》.pdf
智能石墨消解系统——原子荧光光谱法测定罗非鱼中的汞.pdf