Java中的信号量(Semaphore)
是一种用于控制多个线程对共享资源的访问的同步工具。它可以用来限制可以同时访问某些资源的线程数量。Semaphore 提供了一个计数器来管理许可证的获取和释放,每个许可证代表对资源的一次访问权限。
import java.util.concurrent.Semaphore;public class SemaphoreExample {public static void main(String[] args) {int printerCount = 3;Semaphore semaphore = new Semaphore(printerCount);for (int i = 0; i < 10; i++) {new Thread(new PrintJob(semaphore, i)).start();}}
}class PrintJob implements Runnable {private final Semaphore semaphore;private final int jobNumber;PrintJob(Semaphore semaphore, int jobNumber) {this.semaphore = semaphore;this.jobNumber = jobNumber;}@Overridepublic void run() {try {semaphore.acquire();System.out.println("打印任务 " + jobNumber + " 开始使用打印机。");// 模拟打印任务Thread.sleep((long) (Math.random() * 1000));System.out.println("打印任务 " + jobNumber + " 完成。");} catch (InterruptedException e) {e.printStackTrace();} finally {semaphore.release();System.out.println("打印任务 " + jobNumber + " 释放打印机。");}}
}
跳转到:
闭锁(CountDownLatch)
栅栏(CyclicBarrier)