Semaphore使用方法

  /*
* 控制线程执行数
* 原理:
* 在信号量上我们定义两种操作:
* acquire(获取)当一个线程调用acquire操作时,它要么通过成功获取信号量(信号量减一),
* 要么一直等下去,知道有线程释放信号量,或超时。
* release(释放)实际上会将信号量的值加1,然后唤醒等等待的线程。
* 信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数控制
* */
Semaphore semaphore=new Semaphore(3);
for(int i=1;i<=6;i++){
new Thread(()->{
try {
semaphore.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" 抢到了");
try {
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName()+" 离开了");
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
semaphore.release();
}
},String.valueOf(i)).start();
}
}