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()+"\t抢到了");            try {                TimeUnit.SECONDS.sleep(3);                System.out.println(Thread.currentThread().getName()+"\t离开了");            } catch (InterruptedException e) {                e.printStackTrace();            }finally {                semaphore.release();            }        },String.valueOf(i)).start();    }}
相关文章
相关标签/搜索