zoukankan      html  css  js  c++  java
  • 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();
         }
         
      }
    }
     
  • 相关阅读:
    PAT 天梯赛 L1-002 【递归】
    HDU_2717_Catch That Cow
    Stock Exchange (最大上升子子串)
    Lorenzo Von Matterhorn(map的用法)
    Ignatius and the Princess IV (简单DP,排序)
    投掷硬币(概率dp)
    Find The Multiple (DFS递归)
    24 Game
    棋盘问题
    linux上的文件服务
  • 原文地址:https://www.cnblogs.com/cb1186512739/p/12738232.html
Copyright © 2011-2022 走看看