zoukankan      html  css  js  c++  java
  • Java并发组件三之Semaphore

    • 使用场景:常用于使用有限的资源,限制线程并发的最大数量。
      默认情况下,信号量是非公平性的(先等待先执行为公平。类似于买东西的时候大家排队付款,先来的先付款是公平的。但是这时候有人插队,那就是非公平的)

      设定信号量的最大个数:Semaphore semaphore=new Semaphore(3);
    1. 获取信号量:
    2. semaphore.acquire(); //获取信号量
    3. semaphore.acquire(3); //获取多个许可
    4. semaphore.tryAcquire(3); //尝试获取多个许可
    5. semaphore.tryAcquire(5, TimeUnit.SECONDS); //给定时间内获取许可
    6. 释放信号量:semaphore.release();

    代码:
    public class T11_TestSemaphore {
        public static void main(String[] args) {
            //Semaphore s = new Semaphore(2);
            Semaphore s = new Semaphore(2, true);
            //允许一个线程同时执行
            //Semaphore s = new Semaphore(1);
            new Thread(()->{
                try {
                    s.acquire();
                    System.out.println("T1 running...");
                    Thread.sleep(200);
                    System.out.println("T1 running...");
    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    s.release();
                }
            }).start();
            new Thread(()->{
                try {
                    s.acquire();
                    System.out.println("T2 running...");
                    Thread.sleep(200);
                    System.out.println("T2 running...");
                    s.release();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
  • 相关阅读:
    5.3 java虚拟机的体系结构
    5.2 java虚拟机的生命周期
    3.11.5 doPrivileged()方法
    3.11.1 implies方法
    MT【178】平移不变性
    MT【177】三个乘积和
    MT【176】两两乘积
    MT【175】刚刚凑巧
    MT【174】凹凸无妨
    MT【173】齐次消元单变量
  • 原文地址:https://www.cnblogs.com/Courage129/p/12726370.html
Copyright © 2011-2022 走看看