java对象发布和AQS周边

java对象的发布与逃逸(参考这篇

发布  发布的意思是使一个对象能够被当前范围之外的代码所使用

逃逸   一种错误的发布,当一个对象还没有构造完成时,就使它被其他线程所见,可能会读到未初始化的值

对象如何安全发布

  1. 在静态初始化函数中初始化一个对象引用
  2. 将对象的引用保存到volatile类型域或者AtomicReference
  3. 将对象的引用保存到某个正确构造对象的final类型域中,初始化安全
  4. 将对象的引用保存到一个由锁保护的域中,读写上锁

1,2,4点就是单例模式的实现,而final是通过不变来保证对象的发布安全

JUC的核心是AQS(同步队列 AQS,全称 AbstractQueuedSynchronizer)

其他有

java对象发布和AQS周边

  • 三大同步器

          1.CountDownLatch

                java对象发布和AQS周边

       2. CyclicBarrier

       3. Semaphore

                          java对象发布和AQS周边

          CountDownLatch和CyclicBarrier区别:
         1.countDownLatch是一个计数器,线程完成一个记录一个,计数器递减,只能只用一次
         2.CyclicBarrier的计数器更像一个阀门,需要所有线程都到达,然后继续执行,计数器递增,提供reset功能,可以多次使用

  • 一个条件辅助Condition