
多线程
-hantao-
java程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
RateLimiter源码解析
简介限流即流量限制,目的是在遇到流量高峰期或者流量突增时,通过对流量进行限制,以把流量控制在系统所能接受的合理范围之内,不至于让系统被高流量击垮。当达到限制速率时,可以拒绝服务(定向到错误页或告知资源没有了)、排队或等待(比如秒杀、评论、下单)、降级(返回兜底数据或默认数据,如商品详情页库存默认有货)等。Google开源工具包Guava提供了限流工具类RateLimiter,该类基于令牌桶算法来完成限流。令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。桶中存放的令牌数有最大上限,.原创 2020-12-22 19:04:04 · 521 阅读 · 0 评论 -
Semaphore源码解析
Semaphore,信号量,可以用来控制同时访问特定资源的线程数量,可以将信号量看做是在向外分发使用资源的许可证,只有成功获取许可证,才能使用资源。底层基于AQS实现。存在Sync、NonfairSync、FairSync三个内部类,Sync类继承自AbstractQueuedSynchronizer抽象类,NonfairSync与FairSync类继承自Sync类主要变量和方法acquire() 获取一个令牌,在获取到令牌、或者被其他线程调用中断之前线程一直处于阻塞状态。acqu..原创 2020-12-21 22:07:30 · 243 阅读 · 2 评论 -
实现一个线程安全的阻塞队列
1、使用synchronized实现。由于synchronized是同一把锁,所以使用notify()可能会唤醒非目标线程,notifyAll()唤醒全部线程则会带来大量的 CPU 上下文切换和锁竞争public class ArrayBlockingQueue { private Object[] array; //数组 private int head; //头 private int tail; //尾 private volatile int size; //.原创 2020-05-17 16:02:30 · 1266 阅读 · 1 评论 -
从CountDownLatch源码和ReenTrantLock源码看AQS(AbstractQueuedSynchronizer)
目录AQS概念CountDownLatch源码ReenTrantLock源码AQS概念抽象队列同步器,是除了java自带的synchronized关键字之外的锁机制。AQS就是基于虚拟的双向队列(双向链表),用volatile修饰共享int变量state,线程通过CAS+自旋去改变状态符,成功则获取锁成功,失败则进入等待队列,等待被唤醒。关键词:双向链表、CAS、自旋。AQS ...原创 2020-04-23 16:55:00 · 373 阅读 · 0 评论