信号量, 用来表示 “可用资源的个数”. 本质上就是一个计数器.
锁是信号量的一种特殊情况, 可以视为是一个 “二元信号量”
理解信号量
Semaphore 的 PV 操作中的加减计数器操作都是原子的, 可以在多线程环境下直接使用.
代码示例:
创建 Semaphore 示例:
public static void main(String[] args) throws InterruptedException {
Semaphore semaphore = new Semaphore(3);
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
semaphore.acquire();
System.out.println(Thread.currentThread().getName() + "占用了 1 个资源");
Thread.sleep(1000);
semaphore.release();
System.out.println(Thread.currentThread().getName() + "释放了 1 个资源---");
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
};
for (int i = 0; i < 10; i++) {
Thread t = new Thread(runnable);
t.start();
}
}