zoukankan      html  css  js  c++  java
  • 锁:synchronized优化(jdk6)

    1、CAS原理

    (1)CAS:(https://www.cnblogs.com/zhai1997/p/13467606.html

    2、CAS和volatile实现无锁并发

    public class Test {
        public static void main(String[] args) throws InterruptedException {
            AtomicInteger atomicInteger = new AtomicInteger();
            Runnable mr = () -> {
                for (int i = 0; i < 1000; i++) {
                    atomicInteger.incrementAndGet();
                }
            };
            ArrayList<Thread> ts = new ArrayList<>();
            for (int i = 0; i < 5; i++) {
                Thread t = new Thread(mr);
                t.start();
                ts.add(t);
            }
            for (Thread t : ts) {
                t.join();
            }
            System.out.println("number = " + atomicInteger.get());
        }
    }

    AtomicInteger的源码中包括Unsafe类,Unsafe类提供了原子操作

    3、Unsafe类

      Unsafe类使Java拥有了像C语言的指针一样操作内存空间的能力,同时也带来了指针的问题。过度的使用Unsafe类会使得出错的几率变大,因此Java官方并不建议使用的,官方文档也几乎没有。Unsafe对象不能直接调用,只能通过反射获得。

    CAS的这种机制我们称之为乐观锁,综合性能较好

    CAS获取共享变量时,为了保证该变量的可见性,需要使用volatile修饰。结合CAS和volatile可以实现无锁并发,适用于竞争不激烈、多核 CPU 的场景下。

    • 因为没有使用 synchronized,所以线程不会陷入阻塞,这是效率提升的因素之一
    • 但如果竞争激烈,可以想到重试必然频繁发生,反而效率会受影响



    每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛
  • 相关阅读:
    R-CNN算法中NMS的具体做法
    Spring之Environment
    Spring之Aware
    每晚夜里自我独行,随处荡,多冰冷,以往为了自我挣扎
    Java 反射机制
    Java string String
    Java int Integer
    Java final
    Java toString()方法
    Java Enum
  • 原文地址:https://www.cnblogs.com/zhai1997/p/13546239.html
Copyright © 2011-2022 走看看