Semaphore
Semaphore
是什么?
适用于多个线程竞争多个资源的场景。
两个方法
- acquire()
- release ()
模拟抢车位---3个车位 、6个车
/* Semaphore 抢车位 信号量 */ public class juc5 { public static void main(String[] args) { // 构造器值:permits 许可证 – 可用许可证的初始数量。 此值可能为负数,在这种情况下,必须在授予任何获取之前进行释放。 Semaphore semaphore = new Semaphore(3); //模拟有3个车位 for (int i = 1; i <= 6; i++) { //模拟6 个车抢车位 new Thread(()->{ try { semaphore.acquire(); //获得车位 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"\t抢到车位"); try { TimeUnit.SECONDS.sleep(3); // 线程使用该车位 3 秒 } catch (InterruptedException e) { e.printStackTrace(); } semaphore.release(); // 该线程释放该信号量 System.out.println(Thread.currentThread().getName()+"\t释放车位"); },String.valueOf(i)).start(); } } }