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;
}
@Override
public 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)