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();

     }

 }

}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务