并发编程
MaiDouYT
写代码的道路上,越走越迷茫...
展开
-
Semaphore 使用和面试注意点
正常的锁(比如lock)一般都是用来只允许一个任务访问一项资源,而*计数信号量(Semaphore)*允许最多n个任务同时访问这个资源,常常被用来做流控。信号量在使用的过程中总结有如下几点需要注意的:想要执行必须要能通过 acquire() 相关方法获取许可证,否则就会被阻塞,见示例1acquire 和 release 没有绝对的先后顺序,release 可以先于 acquire 执行,且许可证的数量和初始化时么关系,见示例2acquireUninterruptibly 方法相对于 acqui.原创 2020-09-09 00:29:00 · 271 阅读 · 0 评论 -
利用 CompletableFuture的applyToEither 优雅的实现快速失败
问题背景最近遇到一个场景,简化之后即:一个接口要实现对多个服务的聚合查询,多个服务之间不存在依赖,如何能保证在指定的时间内返回查询到的数据,其它的请求按超时丢弃处理问题分析这种聚合的查询接口,性能和稳定性要求都比较高,并且要能够支持返回特定时间内部分查询结果的功能,也就意味着不能阻塞等待所有请求都结束才返回。这个问题有个很关键的前提,即这些服务之间不存在依赖,根据这个信息可以想到这些服务请求都可以单起一个线程发送,所以可以使用线程池,而且都是网络请求,所以可以使用异步发送避免阻塞,那如何解决超时这个原创 2020-08-14 00:28:44 · 2529 阅读 · 3 评论