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,所以线程不会陷入阻塞,这是效率提升的因素之一
    • 但如果竞争激烈,可以想到重试必然频繁发生,反而效率会受影响



    每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛
  • 相关阅读:
    hadoop 配置
    spark 学习网站和资料
    spark-submit 提交任务及参数说明
    python 浮点运算
    nginx 和 php
    clojure 语法
    编程语言
    spark
    mvn 与 pom.xml
    偏导数与偏微分
  • 原文地址:https://www.cnblogs.com/zhai1997/p/13546239.html
Copyright © 2011-2022 走看看