java并发编程实践学习笔记

时间:2021-10-15 19:16:48

  这段时间,仔细学习了并发编程实践这本书,感觉非常不错。

  学习到内置锁,lock,volatile,CAS等方面的知识。

  syncronized内置锁与lock在使用选择上,性能只是一方面,主要lock提供了一些可中断,超时获取等一些特性,作为一个选择的依据。

  volatile,提供了内存的可见性。同步同时提供同步块中操作的原子性与可见性。

  现有底层cpu架构都支持CAS原语操作,java中封装好的类有AtomicInteger,AtomicLong,AtomicReference及AtomicStampedReference(提供版本号解决ABA问题)。

  关于CAS及同步锁的选择上,当竞争非常激烈的情况下,由于多个线程CAS会有很多失败,而不断重试,这种情况下同步锁反而性能高。

  CAS只有在竞争适中的情况下,会比同步锁性能高,这主要得益于线程同步锁时,发生的线程挂起及上下文切换。


  AQS是一个JDK关于同步安全的一个基类,类似CountDownlatch,信号量Semaphor,Lock,FutrueTask的实现类ReentrantLock等都有用到AQS。

   

  其实,应用中安全发布问题,之前项目中一般都用类初始化发布资源,从书中学到了延迟类初始化来发布资源。代码如下:

  class ResourceFactory{

   private class ResourceHolder{

      public static Resource resource=new Resource();

   }

 

  public Resource getResource(){

     return ResourceHlder.resource;

 }

 }

 这段代码提供了安全的延迟初始化resource。在调用ResourceFactory的getResource方法时,将触发ResouceHolder中resource的初始化,JVM会确保当多个线程对resource初始化时的安全性。


技术需要沉淀!