package com.example.concurrency.atomic; import com.example.concurrency.annoations.ThreadSafe; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.atomic.AtomicBoolean; /** * 控制一段代码只执行一次 */ @ThreadSafe public class AtomicExample6 { //请求总数 public static int clientTotal = 5000; //同时并发执行的线程数 public static int ThreadTotal = 200; //是否发生过 public static AtomicBoolean isHappened = new AtomicBoolean(false); public static void main(String[] args) throws InterruptedException { ExecutorService service = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(ThreadTotal); final CountDownLatch countDownLatch = new CountDownLatch(clientTotal); for(int i = 0;i<clientTotal;i++){ service.execute(() -> { try { semaphore.acquire(); test(); semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } countDownLatch.countDown(); }); } countDownLatch.await(); service.shutdown(); System.out.println("isHappened:"+isHappened.get()); } private static void test(){ if(isHappened.compareAndSet(false,true)){ System.out.println("test"); } } }
控制一段代码只执行一次
最新推荐文章于 2023-09-16 21:50:26 发布