synchronized和RetreenLock锁区别

1、synchronized是java关键字,RetreenLock是个java类

2、synchronized无法获取锁状态,Lock可以判断是否持有锁

3、synchronized会自动释放锁,Lock需要在finally中unlock()手动释放锁

4、使用synchronized,线程1获取锁,线程2只能等待;使用Lock,线程1获取锁,线程2会尝试获取锁,如果获取不到,不会一直等待,可以直接结束。

5、synchronized不可重入,不可中断,而Lock可重入,可中断

6、synchronized适合代码量少的同步,Lock适合大量代码同步

volitale和synchronized的区别

  • volitale关键字提供了一个功能,就是被其修饰的变量在被修改后会被强制刷入到主内存中,

    其他处理器的缓存由于遵守了缓存一致性原则,会把这个变量的值从主内存中加载到自己的

    缓存中,因此在并发编程中保证了变量的可见性。

  • volitale关键字会禁止指令重排,从而来保证有序性
  • volitale关键字不能保证原子性
  • synchronized可以保证原子性,通过字节码指令monitorenter和monitorexit。
  • synchronized可以保证可见性
  • synchronized关键字保证同一时刻只允许一条线程操作,从而保证了有序性

PS:多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改后的值,这就是可见性。

volitale、synchronized、RetreenLock区别的更多相关文章

  1. [Android Pro] synchronized与static synchronized 的区别

    reference to :  http://www.cnblogs.com/shipengzhi/articles/2223100.html 1.synchronized与static synchr ...

  2. ReenTrantLock可重入锁(和synchronized的区别)总结

    ReenTrantLock可重入锁(和synchronized的区别)总结 可重入性: 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也 ...

  3. volatile和synchronized的区别

    volatile和synchronized特点 首先需要理解线程安全的两个方面:执行控制和内存可见. 执行控制的目的是控制代码执行(顺序)及是否可以并发执行. 内存可见控制的是线程执行结果在内存中对其 ...

  4. Lock 和 synchronized 的区别

    Lock 和 synchronized 的区别 Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现: synchronized在发生异常时,会 ...

  5. 多线程学习:Volatile与Synchronized的区别、什么是重排序

    java线程的内存模型 java的线程内存模型中定义了每个线程都有一份自己的共享变量副本(本地内存),里面存放自己私有的数据,其他线程不能直接访问,而一些共享变量则存在主内存中,供所有线程访问. 上图 ...

  6. AQS同步组件及ReentrantLock和synchronized的区别

    AQS同步组件 CountDownLatch(只有一个线程对他进行操作): 主线程必须在启动其它线程后立即调用await()方法.这样主线程的操作就会在这个方法上阻塞,直到其它线程完成各自的任务. S ...

  7. ReenTrantLock可重入锁和synchronized的区别

    ReenTrantLock可重入锁和synchronized的区别 可重入性: 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入 ...

  8. 多线程同步锁和死锁以及synchronized与static synchronized 的区别

    线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序.简而言之:一个程序运行后至少有一个进程,一个进程 ...

  9. 多线程的指令重排问题:as-if-serial语义,happens-before语义;volatile关键字,volatile和synchronized的区别

    一.指令重排问题 你写的代码有可能,根本没有按照你期望的顺序执行,因为编译器和 CPU 会尝试指令重排来让代码运行更高效,这就是指令重排. 1.1 虚拟机层面 我们都知道CPU执行指令的时候,访问内存 ...

随机推荐

  1. Microsoft Visual C++ Compiler for Python 2.7真正下载地址

    真正下载地址: http://origin.www.ms.akadns.NET/en-us/download/details.aspx?id=44266 那个微软地址好像不可用.

  2. Ocelot中文文档-Websockets

    Ocelot额外支持代理websockets.这个功能在问题 212中被提出. 为了是Ocelot代理websocket,你需要做如下事情. 在你的Configure方法中,你要告知应用程序使用Web ...

  3. 使用ssh keys实现免验证登陆远程服务

    使用ssh keys实现免验证登陆远程服务========================Created 星期四 10 五月 2018 引言------------------程序员或者服务器运维人员 ...

  4. Java io使用简介

    图:Java io概览图 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更 ...

  5. java后台服务器实现极光推送

    一.添加极光推送所需要的jar包,项目使用的maven,所以只需要在pom文件里添加jar包依赖 <dependency> <groupId>cn.jpush.api</ ...

  6. Pat1128:N Queens Puzzle

    1128. N Queens Puzzle (20) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The & ...

  7. 前端为什么非要动静分离 说一下CDN托管的意义

    大型Web应用对速度的追求并没有止步于仅仅利用浏览器缓存,因为浏览器缓存始终只是为了提升二次访问的速度,对于首次访问的加速,我们需要从网络层面进行优化,最常见的手段就是CDN(Content Deli ...

  8. js 数据加载loading封装

    <!-- 模态框(Modal) --> <div class="modal fade" id="qst_loading" tabindex=& ...

  9. SSM-Spring-02:Spring的DI初步加俩个实例

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- DI:依赖注入 第一个DEMO:域属性注入 java类:(Car类和Stu类,学生有一辆小汽车) packag ...

  10. springboot整合shiro后报java.lang.ClassCastExcepting异常

    最近搭一个springboot的框架,整合了shiro和redis,由于平常习惯用热部署,所以自然的引入了热部署的包,但是引入后报如下错误: 没错,这个问题害我搞了一天,后来删除热部署,项目正常的跑飞 ...