锁:synchronized优化(jdk6)

一、CAS原理并发

(1)CASide

 

二、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类提供了原子操做atom

 

 

 

三、Unsafe类线程

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

 

 

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

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

  • 由于没有使用 synchronized,因此线程不会陷入阻塞,这是效率提高的因素之一
  • 但若是竞争激烈,能够想到重试必然频繁发生,反而效率会受影响

 



 

每一个人都会有一段异常艰难的时光 。 生活的压力 , 工做的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,因此没必要惧怕的。 ——杨绛
相关文章
相关标签/搜索