zoukankan      html  css  js  c++  java
  • 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();
    }
    }
  • 相关阅读:
    6.11 修饰符的适用范围
    5.10 对象与垃圾回收
    5.9 枚举类
    5.8 java 11增强的Lambda表达式
    5.7 内部类
    5.6 接口
    5.5 抽象类
    5.4 final修饰符
    5.3 类成员
    5.2 Object类中两个需要被重写的方法
  • 原文地址:https://www.cnblogs.com/shanbaoxin/p/11661682.html
Copyright © 2011-2022 走看看