• JUC强大的辅助类讲解--->>>CyclicBarrier(信号灯)


    原理:

    在信号量上我们定义两种操作:
    * acquire(获取) 当一个线程调用acquire操作时,它要么通过成功获取信号量(信号量减1),
    * 要么一直等下去,直到有线程释放信号量,或超时。
    * release(释放)实际上会将信号量的值加1,然后唤醒等待的线程。
    *
    * 信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。

    import java.util.Random;
    import java.util.concurrent.Semaphore;
    import java.util.concurrent.TimeUnit;
     
    /**
     * 
     * @Description: TODO(这里用一句话描述这个类的作用)  
     * 
     * 在信号量上我们定义两种操作:
     * acquire(获取) 当一个线程调用acquire操作时,它要么通过成功获取信号量(信号量减1),
     *             要么一直等下去,直到有线程释放信号量,或超时。
     * release(释放)实际上会将信号量的值加1,然后唤醒等待的线程。
     * 
     * 信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。
     */
    public class SemaphoreDemo
    {
      public static void main(String[] args)
      {
         Semaphore semaphore = new Semaphore(3);//模拟3个停车位
         
         for (int i = 1; i <=6; i++) //模拟6部汽车
         {
           new Thread(() -> {
              try 
              {
                semaphore.acquire();
                System.out.println(Thread.currentThread().getName()+"	 抢到了车位");
                TimeUnit.SECONDS.sleep(new Random().nextInt(5));
                System.out.println(Thread.currentThread().getName()+"	------- 离开");
              } catch (InterruptedException e) {
                e.printStackTrace();
              }finally {
                semaphore.release();
              }
           }, String.valueOf(i)).start();
         }
         
      }
    }
     
  • 相关阅读:
    Quartz cron表达式
    Apache NiFi 核心概念和关键特性
    Hive llap服务安装说明及测试(一)
    nifi生产环境使用
    DataX 中Transformer的使用
    vue2.0之过渡动画,分别用钩子函数,animated,原生css实现(前端网备份)
    js对对象数组的某一字段排序(前端网备份)
    浏览器之禁扒(前端网备份)
    iframe 从父像子穿参数(前端网备份)
    关于小程序仿微博导航效果(前端网备份 )
  • 原文地址:https://www.cnblogs.com/cb1186512739/p/12738232.html
Copyright © 2020-2023  润新知