Semaphore 也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。
使用 Semaphore 可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。

测试案例

  1. package com.personal.test.countdownlatch;
  2. import lombok.SneakyThrows;
  3. import java.util.concurrent.CyclicBarrier;
  4. public class CyclicBarrier00 {
  5. public void test00() {
  6. CyclicBarrier cyclicBarrier = new CyclicBarrier(2);
  7. new Thread(new Runnable() {
  8. @SneakyThrows
  9. @Override
  10. public void run() {
  11. System.out.println(Thread.currentThread().getName() + " 准备开始");
  12. cyclicBarrier.await();
  13. System.out.println(Thread.currentThread().getName() + " 处理完成");
  14. }
  15. }).start();
  16. new Thread(new Runnable() {
  17. @SneakyThrows
  18. @Override
  19. public void run() {
  20. System.out.println(Thread.currentThread().getName() + " 准备开始");
  21. Thread.sleep(2000);
  22. cyclicBarrier.await();
  23. System.out.println(Thread.currentThread().getName() + " 处理完成");
  24. }
  25. }).start();
  26. }
  27. public static void main(String[] args) {
  28. CyclicBarrier00 cyclicBarrier00 = new CyclicBarrier00();
  29. cyclicBarrier00.test00();
  30. }
  31. }

参考资料

理解 Semaphore 及其用法详解