Semaphore(信号量)用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。
模拟此类情景,例如某停车地点有3个停车位,只允许3辆车同时停车,共有6辆车,3辆抢先进入停车位,其他车俩排队,待前面三辆车出停车位后再进入。
1 import java.util.concurrent.Semaphore;
2
3 public class SemaphoreDemo {
4
5 public static void main(String[] args){
6 Semaphore semaphore=new Semaphore(3);
7 for (int i = 1; i < 7; i++) {
8 final int count =i;
9 new Thread(()->{
10 try {
11 semaphore.acquire(1);
12 System.out.println(count+"进停车位.");
13 Thread.sleep(2000);
14 System.out.println(count+"出停车位.");
15 } catch (InterruptedException e) {
16 e.printStackTrace();
17 }finally {
18 semaphore.release(1);
19 }
20 }).start();
21 }
22 }
23 }
信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。