
JAVA并发
860MHz
这个作者很懒,什么都没留下…
展开
-
Tomcat线程池的优化
1. 简介Tomcat继承并重写了JAVA原生的java.util.concurrent.ThreadPoolExecutor,增加了一些更有效率的方法,并且默认拒绝策略为RejectedExecutionException。2. 原理分析2.1 实例化与阿里巴巴JAVA规范中定义的线程池创建规范类似,Tomcat实例化线程池时,同样限制了任务队列的长度,maxQueueSize默认为In...原创 2019-09-25 16:27:44 · 746 阅读 · 0 评论 -
Web服务器的线程策略
1. 简介当前主流的Web服务器如Tomcat、Jetty均已采用nio作为默认的I/O模型。通常nio的线程模型中会有一组Acceptor线程用于接收客户端连接,一组Selector线程用于监听和处理I/O事件。当Selector检测到I/O事件后,是用同一个线程执行业务逻辑,还是将事件提交到一个业务线程组执行呢?不同的应用服务器,不同的场景下有着不同的策略。本文将介绍几种主流的应用服务器的...原创 2019-09-24 17:26:31 · 570 阅读 · 0 评论 -
OpenJDK ZGC 源码分析(二)触发GC的时机
1. 简介ZGC的回收周期触发时机与其他GC算法略有不同,VM内部有个线程轮询定期检查是否满足开始回收的条件,如果满足则开始回收。ZGC提供四种策略,其中一种满足条件即触发回收:rule_timer,定时策略,距离上次GC时间超过interval即触发GCrule_warmup,VM启动后,如果从来没有发生过GC,则在堆内存使用超过10%、20%、30%时,分别触发一次GC,以收集GC数...原创 2019-08-08 12:22:10 · 1147 阅读 · 0 评论 -
Ehcache的多级缓存机制
1. 简介Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存、Java EE和轻量级容器。它具有堆内内存、堆外内存、磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序等特点。本文将介绍堆内内存、堆外内存、磁盘存储多种存储介质组合的缓存模式及原理分析。2. 分级缓存设计作为本地缓存框架, Ehcache支持多层缓存模式,常用的有三种数据存储介质:堆内直接在JVM堆中存...原创 2019-07-10 13:35:50 · 1796 阅读 · 0 评论 -
JVM中锁
自旋锁互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性能带来了很大的压力。而在很多应用上,共享数据的锁定状态只会持续很短的一段时间。若实体机上有多个处理器,能让两个以上的线程同时并行执行,我们就可以让后面请求锁的那个线程原地自旋(不放弃CPU时间),看看持有锁的线程是否很快就会释放锁。为了让线程等待,我们只须让线程执行一个忙循环(转载 2016-05-09 09:31:00 · 370 阅读 · 0 评论 -
Condition
在java.util.concurrent包中,有两个很特殊的工具类,Condition和ReentrantLock,使用过的人都知道,ReentrantLock(重入锁)是jdk的concurrent包提供的一种独占锁的实现。它继承自Dong Lea的 AbstractQueuedSynchronizer(同步器),确切的说是ReentrantLock的一个内部类继承了AbstractQueue转载 2016-05-25 10:20:34 · 365 阅读 · 0 评论 -
聊聊并发(6)ConcurrentLinkedQueue的实现原理分析
1. 引言在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本文让我们一起来研究下Doug Lea是如何使用非阻塞的方式来实现线程安全队列Concu转载 2016-01-25 18:20:59 · 619 阅读 · 0 评论 -
聊聊并发(5):原子操作的实现原理
聊聊并发(5):原子操作的实现原理1 引言原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Inter处理器和Java里是如何实现原子操作的。 2 术语定义术语名称英转载 2016-01-25 18:20:12 · 661 阅读 · 0 评论 -
聊聊并发(二)Java SE1.6中的Synchronized
1 引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。 2 术语定义术语英文转载 2016-01-19 10:03:07 · 394 阅读 · 0 评论