zoukankan      html  css  js  c++  java
  • volitale、synchronized、RetreenLock区别

    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都是可重入的    Synchronized可重入锁分析   OR    Synchronized可重入锁通俗易懂的简单分析

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

    volitale和synchronized的区别

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

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

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

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

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

  • 相关阅读:
    在ASP.NET MVC中使用DropDownList引用。呵呵。
    获取泛型对象
    Tomcat JVM 初始化加大内存
    Tomcat6.0 连接池的配置
    @ResponseBody与Ajax
    c3po数据库连接池中取出连接
    SpringMVC
    JQuery发送Ajax请求
    Java生成验证码
    Spring初学
  • 原文地址:https://www.cnblogs.com/java-spring/p/10792097.html
Copyright © 2011-2022 走看看