Semaphore类的使用

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 }

 

信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制

猜你喜欢

转载自www.cnblogs.com/fangtingfei/p/12312538.html