JUC輔助類之CyclicBarrier
阿新 • • 發佈:2022-04-10
想實現收集七顆龍珠,召喚神龍的過程
import java.util.concurrent.CyclicBarrier; public class CyclicBarrierDemo { //建立固定值 private static final int NUMBER=7; public static void main(String[] args) { //建立CyclicBarrier CyclicBarrier cyclicBarrier =new CyclicBarrier(NUMBER,()->{ System.out.println("可以召喚神龍了"); System.out.println("\n"); }); for(int i=1;i<=7;i++){ new Thread(()->{ try { System.out.println(Thread.currentThread().getName()+"星龍珠收齊"); cyclicBarrier.await(); } catch (Exception e) { e.printStackTrace(); } },String.valueOf(i)).start(); } } }
其與coundtdownLatch不同在於,可以通過reset方法重新計數,不同於CountDownLatch基於AQS,它底層是通過鎖和Condition實現,本質上是volatile和CAS