Semaphore的理解
Semaphore可以用于控制同时访问特定资源的线程数量。保证合理的利用资源。
通常使用Semaphore来进行限流。
使用场景:明确有资源访问限制的场景。
semaphore.acquire();//获取许可
semaphore.release();//释放
public class ConcurrentSemphore {
public static void main(String[] args) {
//创建三个信号量,表示同一时间只能最多有三个线程去抢占同一个资源。
Semaphore s=new Semaphore(3);
for(int i=0;i<10;i++) {
Thread t1=new Thread(new CarPark(s));
t1.start();
}
}
}
class CarPark implements Runnable{
private Semaphore s;
public CarPark(Semaphore s) {
this.s=s;
}
@Override
public void run() {
// TODO Auto-generated method stub
int available=s.availablePermits();
if(available>0)
System.out.println(Thread.currentThread().getName()+"有车位");
else
System.out.println(Thread.currentThread().getName()+"没有车位了");
try {
s.acquire();
System.out.println(Thread.currentThread().getName()+"获得了车位");
System.out.println(Thread.currentThread().getName()+"释放了车位");
s.release();
} catch (InterruptedException e) {
}
}
}