• 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();
        }
    }
  • 相关阅读:
    HDU 1495 广度优先搜索
    oj 1792:迷宫 广搜和深搜
    oj 1756:八皇后 搜索
    OJ1700 八皇后问题 基本搜索算法
    PAT A1020
    PAT A1103
    PAT A1046 Shortest Distance
    PAT A1059
    PAT B1013
    二分查找
  • 原文地址:https://www.cnblogs.com/Courage129/p/12726370.html
Copyright © 2020-2023  润新知