砍材农夫砍材农夫
  • java
  • redis
  • mysql
  • 场景类
  • vuepress搭建
  • hexo搭建
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI工具
  • MCP
  • AI集成框架
  • 相关算法
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • java
  • redis
  • mysql
  • 场景类
  • vuepress搭建
  • hexo搭建
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI工具
  • MCP
  • AI集成框架
  • 相关算法
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 基础面试题

    • 基础面试
    • 双亲委派
    • 关于锁
  • 线程并发

    • 线程
    • 线程安全
    • 线程实现方式
    • 线程相关属性
    • Thread和Object相关方法
    • 线程异常
    • 线程池
  • 高并发(JUC|AQS)

    • concurrency
    • AbstractQueuedSynchronizer
    • CountDownLatch
    • Semaphore
    • CyclicBarrier
    • ReentrantLock
    • Future/FutureTask
    • Fork/Join
    • BlockingQueue
    • ArrayBlockingQueue
    • DelayQueue
    • PriorityBlockingQueue
  • 集合相关

    • 集合相关
  • jvm

    • jvm概览
    • 垃圾标记算法
    • 垃圾回收算法
    • jvm监控相关工具
    • jvm内存调优
  • 锁

    • synchronized
  • 介绍
  • demo
  • 总结
  • 代码

介绍

就是要给令牌池,可获取信号量(令牌或者许可)、放入信号量
常用于控制并发的线程数,也可用于池类资源的访问控制

demo

package com.jysemel.java.lock;

import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

public class SemaphoreDemo {


    public static void main(String[] args) {
        Semaphore semaphore = new Semaphore(2);
        for (int i = 0; i < 10; i++) {
            int finalI = i;
            new Thread(() -> {
                try {
                    if (semaphore.tryAcquire(1, TimeUnit.SECONDS)) {
                        System.out.println(finalI + "-" + Thread.currentThread().getName() + " 获取信号量");
                        System.out.println(finalI + "-" + Thread.currentThread().getName() + " 正在运行");
                        Thread.sleep(TimeUnit.SECONDS.toMillis(6));
                        semaphore.release();
                        System.out.println(Thread.currentThread().getName() + " 释放信号量");
                    } else {
                        System.out.println(finalI + "-" + "未获取 跳过丢弃");
                    }
                } catch (InterruptedException e) {
                    System.out.println(Thread.currentThread().getName() + " 获取异常");
                }
            }).start();
        }
    }
}

总结

合理设置许可数:根据系统资源和性能要求设置
使用 try-finally 确保释放许可
考虑使用公平模式:如果对公平性有要求
监控队列长度:避免线程长时间等待
考虑使用 tryAcquire 带超时:避免死锁

代码

代码

最近更新: 2026/1/15 17:38
Contributors: kcnf
Prev
CountDownLatch
Next
CyclicBarrier