信号量
Semaphore 和操作系统的信号量很类似,但是这里它也可以作为锁使用。即可以作为锁与协调线程作用
- 锁
1 | public class SemaphoreDemo { |
打印结果
2等待
1等待
3等待
2进入
2释放
1进入
1释放
3进入
3释放
可以看到首先3个线程同时到来临界区边界,但是同时只有一个线程能进入临界区。
- 协调线程
1 | public class SemaohoreDemo2 { |
打印结果
pool-1-thread-3进入临界区
pool-1-thread-2进入临界区
pool-1-thread-1进入临界区
pool-1-thread-3释放信号
pool-1-thread-1释放信号
pool-1-thread-2释放信号
pool-1-thread-4进入临界区
pool-1-thread-5进入临界区
pool-1-thread-6进入临界区
pool-1-thread-4释放信号
pool-1-thread-5释放信号
pool-1-thread-6释放信号
从结果可以看到有3个线程同时进入了临界区。