LongAdder | LongAccumulator简介
说到LongAdder,不得不提的就是AtomicLong。AtomicLong是JDK1.5开始出现的,里面主要使用了一个long类型的value作为成员变量。然后使用循环的CAS操作去操作valu...
说到LongAdder,不得不提的就是AtomicLong。AtomicLong是JDK1.5开始出现的,里面主要使用了一个long类型的value作为成员变量。然后使用循环的CAS操作去操作valu...
StampedLock是JDK1.8新引入的锁机制,可以简单的理解为读写锁的改进版本。我们知道读写锁可以让读和读之间完全并发,但是读和写之间是有阻塞的。StampedLock使用了一种乐观锁的读策略,...
CompletableFuture是JDK1.8新增的工具类。它继承了Future和CompletionStage接口,里面提供了大量的链式调用的API。下面简单的介绍一下其用法:异步执行任务Comp...
Future模式是一种让调用线程可以异步处理任务的设计模式,它可以让调用线程利用异步处理的时间去执行其他任务,从而使硬件资源达到一个更好的利用率。参考以下时序图:下面介绍一下各个成员的作用:MainT...
伪共享问题(false sharing)对于解释伪共享问题,就需要了解一下缓存行的相关概念。缓存行是主存复制到高速缓存的最小单位,一般情况下缓存行的大小为32~128字节(通常为64字节)。在多线程程...
单生产者单消费者模式生产者消费者模型是一个经典的问题,其主要有3部分构成:生产者、阻塞队列和消费者。如下图所示:生产者消费者模式,可以在一定程度上面做到程序之间的模块解耦。但是还有一个主要的特性,就是...
我们在多线程编程的过程中,对于锁的使用有一些可以优化的地方。下面介绍一下,自己在写业务代码中需要注意的问题和JVM对锁的优化操作。业务代码中的注意事项减少锁的持有时间:意思就是在同步快内部的代码,对于...
今天我们介绍一下ConcurrentLinkedQueue的内部实现。从名字就可以看出来,其内部使用链表实现。下面介绍一下它的结构:基本结构单单从类图看来,结构不算复杂,有两个重要的属性就是head和...
CopyOnWriteArrayList是自JDK5开始提供的支持并发读写的List。从名字可以大致的看出来其内部的设计思想:在写入前copy一份数据以提供修改。下面看一下具体的实现:基本结构 ...
今天我们介绍一下ConcurrentHashMap在JDK1.8中的实现。基本结构ConcurrentHashMap在1.8中的实现,相比于1.7的版本基本上全部都变掉了。首先,取消了Segment分...