1、volitile和(synchronnized、lock)

首先比较volitile和synchronnized,volitile线程不安全,但是synchronized则是线程安全的。

volitile修饰的变量主要作用让变量的改变立即写到主存,这样在其它的线程查看此变量的时候是最新的值。在Java中为了加快程序的运行效率,对一些变量的操作通常是在该线程的寄存器或是CPU缓存上进行的,之后才会同步到主存中,而加了volatile修饰符的变量则是直接读写主存。

当我们使用lock和synchronized的时候,也可以保证可见性,而且可以保证原子性。synchronized可以修饰一个代码块或者一个方法等,但是显然很多时候volitile的性能要优于synchronized的。

2、synchronized和lock的比较

两者的最直观的感受就是一个是关键字、一个是类。

关键字更贴近底层,不像类那么好操作,所以呢一旦synchronized修饰的方法或者代码块之类的拿到锁以后,只有两种情况会释放锁:

一是修饰的方法或者代码块运行完毕,二是运行出现异常,会释放锁。

lock则是可以更加灵活应用,可以直接调用lock.lock,也可以调用lock.tryLock()等,获取到锁,那么tryLock()方法更加在未能获得锁的情况下仍然就可以运行下面的不会一直等待,lock接口中还定义了一个方法,就是lockInterruptibly(),

1)如果当前线程未被中断,则获取锁。

2)如果该锁没有被另一个线程保持,则获取该锁并立即返回,将锁的保持计数设置为 1。

3)如果当前线程已经保持此锁,则将保持计数加 1,并且该方法立即返回。

如果该锁被另一个线程持有,则该线程不可被调度(disabled for thread scheduling purposes)(即阻塞状态,CPU不会给该线程分配时间片)直到该线程获取到该锁,并且在获取到锁后,将保持计数设置为1

4)如果当前线程获得该锁,则将锁保持计数设置为 1。

如果当前线程:

1)在进入此方法时已经设置了该线程的中断状态;或者

2)在等待获取锁的同时被中断。

则抛出 InterruptedException,并且清除当前线程的已中断状态。

5)在此实现中,因为此方法是一个显式中断点,所以要优先考虑响应中断,而不是响应锁的普通获取或

重入获取。

未完待续

java并发vol_java 并发中 volitile、synchronized和lock的比较(一)相关推荐

  1. 【java线程】锁机制:synchronized、Lock、Condition

    [Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...

  2. 并发中的Synchronized、Lock、Volite、Map、ThreadLocal

    文章目录 Synchronized synchronized 的三种应用方式 synchronized 括号后面的对象 synchronized 的锁的原理 Java 对象头 synchronized ...

  3. JUC里面的相关分类|| java并发编程中,关于锁的实现方式有两种synchronized ,Lock || Lock——ReentrantLock||AQS(抽象队列同步器)

    JUC分类 java并发编程中,关于锁的实现方式有两种synchronized ,Lock AQS--AbstractQueuedSynchronizer

  4. java并发中的Synchronized关键词

    文章目录 为什么要同步 Synchronized关键词 Synchronized Instance Methods Synchronized Static Methods Synchronized B ...

  5. Java并发编程包中atomic的实现原理

    转载自   Java并发编程包中atomic的实现原理 这是一篇来自粉丝的投稿,作者[林湾村龙猫]最近在阅读Java源码,这一篇是他关于并发包中atomic类的源码阅读的总结.Hollis做了一点点修 ...

  6. Java并发编程(多线程)中的相关概念

    众所周知,在Java的知识体系中,并发编程是非常重要的一环,也是面试中必问的题,一个好的Java程序员是必须对并发编程这块有所了解的. 并发必须知道的概念 在深入学习并发编程之前,我们需要了解几个基本 ...

  7. java volatile lock_Java并发学习笔记 -- Java中的Lock、volatile、同步关键字

    Java并发 一.锁 1. 偏向锁 1. 思想背景 来源:HotSpot的作者经过研究发现,大多数情况下,锁不仅不存在多线程竞争,而且总是由同 一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁 ...

  8. Java 并发在项目中的使用场景

    1.并发编程的三个核心问题: (1)分工:所谓分工指的是如何高效地拆解任务并分配给线程 (2)同步:而同步指的是线程之间如何协作 (3)互斥:互斥则是保证同一时刻只允许一个线程访问共享资源 (4)应用 ...

  9. Java并发编程(中下篇)从入门到深入 超详细笔记

    接上一篇博客笔记:Java并发编程(中上篇)从入门到深入 超详细笔记_未来很长,别只看眼前的博客-CSDN博客https://blog.csdn.net/weixin_53142722/article ...

最新文章

  1. pek (北大oj)3070
  2. 设计师之歌 --【死了都要改】
  3. 计算Gaunt积分m1m2≥0
  4. 推荐TensorFlow2.0的样例代码下载
  5. eyoucms 入门必备
  6. x264编码参数大测试:05 subme与crf(g)
  7. KB954430补丁重复安装失败的解决办法
  8. Android系统信息获取 之六:网络连接状态信息获取
  9. 结对-结对编程项目作业名称-需求分析
  10. JRtplib开发笔记(一):JRtplib简介、JThread库编译
  11. Java操作Excel完成导入导出
  12. flutter ListView.separated使用
  13. 《内向性格的竞争力:发挥你的本来优势》读书笔记
  14. 服务器怒稳定进不了某个网址,登录服务器的一瞬间,让我感觉自己再也不是“菊外人”...
  15. np.random.binomial()
  16. Spring AOP 学习总结
  17. React 运行流程
  18. 解决在高分辨率下运行Photoshop CS6,程序界面字体过小的问题
  19. 离家、失恋、职场碰壁,小伙如何守住大城市的“一张床”?
  20. python 在List中随机抽取n个元素

热门文章

  1. Eigen库使用之矩阵的最大/小值及其位置
  2. 使用python中的Matplotlib绘图示例
  3. Python中lxml库的安装(Windows平台)
  4. ERROR: from PIL import Image ImportError: No module named PIL
  5. Yii 错误页面处理
  6. 初识java类的接口实现
  7. jquery 的3D Carousel插件参数说明
  8. mysql单表多timestamp的current_timestamp设置问题
  9. Java 集合框架(二)—— ArrayList
  10. OpenCV 【十四】改变图像的对比度和亮度高度关联章节:OpenCV 【十】——Gamma校正 ——图像灰度变化