保证每段代码只会执行一次的例子

it2022-05-05  108

public class AtomicExample6 {

    private static AtomicBoolean isHappened = new AtomicBoolean(false);

    // 请求总数     public static int clientTotal = 5000;

    // 同时并发执行的线程数     public static int threadTotal = 200;

    public static void main(String[] args) throws Exception {         ExecutorService executorService = Executors.newCachedThreadPool();         final Semaphore semaphore = new Semaphore(threadTotal);         final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);         for (int i = 0; i < clientTotal ; i++) {             executorService.execute(() -> {                 try {                     semaphore.acquire();                     test();                     semaphore.release();                 } catch (Exception e) {                     log.error("exception", e);                 }                 countDownLatch.countDown();             });         }         countDownLatch.await();         executorService.shutdown();         log.info("isHappened:{}", isHappened.get());     }

    private static void test() {         if (isHappened.compareAndSet(false, true)) {             log.info("execute");         }     } }


最新回复(0)