Semaphore自白:限流器用我就对了!(3)

简介: Semaphore自白:限流器用我就对了!(3)

个人评价


我(Semaphore)实现证书控制手段有两种,一种公平模式和非公平模式,当然为了执行的性能考虑,默认情况下我采取的是非公平的方式,具体实现可见源码:


public Semaphore(int permits) {
    sync = new NonfairSync(permits); // 非公平模式
}


关于公平模式和非公平模式


所谓的公平模式就是以调用 acquire() 的先后顺序来决定获取许可证的顺序的,公平模式遵循先进先出(FIFO)原则;而非公平模式是抢占式的,也就是有可能一个新的获取线程恰好在一个许可证释放时得到了这个许可证,而前面还有等待的线程。


显然使用非公平的模式性能更高,因为它会把许可证发放给刚好准备好的线程,而不用再根据先后顺序去“叫号”了。


使用公平模式


当然,你可以手动选择使用公平模式来运行 Semaphore,Semaphore 提供了两个构造函数,源码如下:


public Semaphore(int permits) {
    sync = new NonfairSync(permits);
}
public Semaphore(int permits, boolean fair) {
    sync = fair ? new FairSync(permits) : new NonfairSync(permits);
}


如果想用公平模式就可以使用第二个构造函数 Semaphore(int permits, boolean fair),将 fair 值设置为 true 就是公平模式来获取证书了。

相关文章
|
4月前
|
Java
JAVA并发编程系列(7)Semaphore信号量剖析
腾讯T2面试,要求在3分钟内用不超过20行代码模拟地铁安检进站过程。题目设定10个安检口,100人排队,每人安检需5秒。实际中,这种题目主要考察并发编程能力,特别是多个线程如何共享有限资源。今天我们使用信号量(Semaphore)实现,限制同时进站的人数,并通过信号量控制排队和进站流程。并详细剖析信号量核心原理和源码。
|
8月前
|
安全 Java 数据库连接
并发控制利器Semaphore
并发控制利器Semaphore
66 0
|
8月前
|
Java 数据库
Semaphore(信号量)源码解读与使用
Semaphore(信号量)源码解读与使用
|
8月前
|
安全 Java 开发工具
Semaphore:实现一个限流器
Semaphore:实现一个限流器
73 0
|
8月前
|
安全 Java Linux
Linux多线程【线程池】
Linux多线程【线程池】
78 0
|
存储 缓存 Java
线程池之刨根问底
线程池之刨根问底
129 0
线程池之刨根问底
|
安全 Java Linux
Linux多线程:线程池
Linux多线程:线程池
156 0
Linux多线程:线程池
|
安全 Java
面试官:你给我说一下线程池里面的几个锁吧。 (上)
面试官:你给我说一下线程池里面的几个锁吧。 (上)
158 0
面试官:你给我说一下线程池里面的几个锁吧。 (上)
|
Java
面试官:你给我说一下线程池里面的几个锁吧。 (中)
面试官:你给我说一下线程池里面的几个锁吧。 (中)
135 0
面试官:你给我说一下线程池里面的几个锁吧。 (中)

热门文章

最新文章

下一篇
开通oss服务