![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
高并发
文章平均质量分 70
LiZhen798
软件研发工程师
语言:Java,Go
展开
-
lock()与lockInterruptibly()
另一种是线程被唤醒后检测到中断请求,则立即抛出中断异常,该操作导致方法结束。结论:ReentrantLock的中断和非中断加锁模式的区别在于:线程尝试获取锁操作失败后,在等待过程中,如果该线程被其他线程中断了,它是如何响应中断请求的。如果要求被中断线程不能参与锁的竞争操作,则此时应该使用lockInterruptibly方法,一旦检测到中断请求,立即返回不再参与锁的竞争并且取消锁获取操作。lock获取锁过程中,忽略了中断,在成功获取锁之后,再根据中断标识处理中断,即selfInterrupt中断自己。原创 2023-03-16 14:29:39 · 315 阅读 · 0 评论 -
线程池的五种状态
当线程池的状态变为TIDYING状态时,会调用钩子函数terminated(),该方法在ThreadPoolExecutor中是空的,若用户想在线程池变为TIDYING时进行相应的处理,就需要重载terminated()函数实现。状态切换:当线程池状态为SHUTDOWN时,阻塞队列为空并且线程池中执行的任务也为空时,就会由SHUTDOWN->TIDYING。状态切换:线程池的初始状态为RUNNING。状态说明:线程池处于STOP状态时,不接收新任务,不处理已添加的任务,并且会中断正在处理的任务。原创 2023-01-31 17:07:17 · 553 阅读 · 0 评论 -
CompletableFuture实现线程池结果
向线程池中提交任务的submit方法不是阻塞方法,而Future.get方法是一个阻塞方法,当submit提交多个任务时,只有所有任务都完成后,才能使用get按照任务的提交顺序得到返回结果。Future虽然可以实现获取异步执行结果的需求,但是它没有提供通知的机制,要么使用阻塞,在future.get()的地方等待future返回的结果,这时又变成同步操作;要么使用isDone()轮询地判断Future是否完成,这样会耗费CPU的资源原创 2022-10-10 11:43:33 · 2601 阅读 · 0 评论 -
shutdown、shutdownNow方法的理解
1、当线程池调用该方法时,线程池的状态则立刻变成SHUTDOWN状态。此时,则不能再往线程池中添加任何任务,否则将会抛出RejectedExecutionException异常。但是,此时线程池不会立刻退出,直到添加到线程池中的任务都已经处理完成,才会退出。...原创 2022-08-17 14:33:08 · 1778 阅读 · 0 评论 -
多线程某个线程异常了怎么处理
目录一个简单的例子submit方法执行时异常信息为什么消失了Future是如何吃掉异常信息的如何拿到submit提交的线程任务的异常信息通过统一Runnable父类实现异常信息的统一处理通过自定义的线程池来对异常信息进行统一的处理。异常信息作为我们平时定位问题的一大法宝,其重要性是不言而喻的。一段代码出现了问题,如果它的异常信息被吃了,那么一个本来很简单的问题,定位起来也会变的很麻烦。今天我们就从异常信息被吃掉,导致相应信息没有输出到日志的问题说起。一个简单的例子首先原创 2021-11-03 19:58:35 · 2573 阅读 · 0 评论 -
控制并发线程数-Semaphore(信号量)的简单使用
Semaphore(信号量)用来控制并发访问的线程数量,它通过协调各个线程来保证资源的合理使用。其内部使用的是AQS机制(concurrent包下很多类实现原理都是基于AQS)。Semaphore实现控制并发线程数可以抽象为停车场模型,一个固定车位的停车场,当车位满了,便不再允许新的车辆进入;若当前车库驶出多少辆,则就允许进入多少辆。Semaphore做的就是监控车位大小功能。通过构造函数new Semaphore(N)来实现,N表示最多并发访问的线程数。所以当初始化创建了5个许可证时,如果多余5个线程并发原创 2021-10-13 14:01:34 · 442 阅读 · 0 评论 -
Java Fork/Join框架
原文译序Doug Lea大神关于Java 7引入的他写的Fork/Join框架的论文。响应式编程(Reactive Programming/RP)作为一种范式在整个业界正在逐步受到认可和落地,是对过往系统的业务需求理解梳理之后对系统技术设计/架构模式的提升总结。Java作为一个成熟平台,对于趋势一向有些稳健的接纳和跟进能力,有着令人惊叹的生命活力:Java 7提供了ForkJoinPool,支持了Java 8提供的Stream。 另外Java 8还提供了Lamda(有效地表达和使用...原创 2021-09-02 19:55:39 · 312 阅读 · 0 评论 -
限流技术小计
前言 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。 缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询(评论的最后几页),因此需有一种手段来限制这些场景的并发/请求量,即限流。限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请...原创 2021-08-11 21:53:07 · 133 阅读 · 0 评论