
java并发编程
懒惰的小强!
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java并发编程基础-----volatile和伪共享
synchronized是Java提供的一种原子性的内置锁,其他对象可以将其作为一个同步锁使用,synchronized能够保证内存可见性和原子性,是一个重量级的锁,而有些时候只需要保证内存可见性即可的情况下,可以使用volatile关键字,用以保证变量的内存可见性。 1 volatile适用的情况 写入变量值不依赖、变量的当前值时。因为如果依赖当前值,将是获取一计算一写入 三步操作,这三步操作...原创 2019-07-08 21:32:33 · 358 阅读 · 0 评论 -
Java并发编程基础-----锁
1 悲观锁和乐观锁 悲观锁:在sql语句末尾加上 for update 乐观锁:在sql的where语句中添加version条件 update tablel set name=#{name),age=#{age),version=${version)+1 where id =#{id} and version=#{version} 乐观锁并不会使用数据库提供的锁机制, 一般在表中添加versio...原创 2019-07-09 21:27:50 · 263 阅读 · 0 评论 -
java并发包基础 ---AQS
Java并发包中锁的底层都是使用AQS实现的,今天开始堆AQS进行简单的分析。AQS是AbstractQueuedSynchronizer的简称,继承自AbstractOwnableSynchronizer,有两个内部类Node和ConditionObject,这大致就是AQS的内部结构了。 AQS 是一个FIFO 的双向队列,队列元素的类型内部类Node,Node内部类如下。 static fi...原创 2019-07-14 22:07:54 · 220 阅读 · 0 评论 -
Random的升级版---ThreadlocalRandom
Random在日常开发过程中还是挺常用的,用于生成随机值; Random random = new Random(); random.nextInt(100); /** *nextInt(100)实际调用的方法是next(int bits) * */ protected int next(int bits) { long oldseed, nextseed; ...原创 2019-07-09 22:25:22 · 477 阅读 · 0 评论 -
原子操作类LongAdder
LongAdder是一个原子性递增或者递减类,与AtomicLong的不同之处在于,LongAdder能够解决高并发情况下多线程同时竞争同意资源,而带来性能降低的问题。主要是通过将一个变量拆分为多个Cell,从而将单个变量的并发数分散到多个Cell上。关于LongAdder实现的几个分体如下: (1)LongAdder 的结构是怎样的? (2)当前线程应该出问Cell 数组里面的哪一个Cell元素...原创 2019-07-10 22:29:33 · 407 阅读 · 0 评论 -
并发编程之ForkJoin使用及原理
以forkJoin的一个使用情景开始吧 public class ForkJoinQuery extends RecursiveTask<Boolean> { private static final int THREAD_HOLD = 5000; private long start; private long end;//需要查询的所有数据的数量 private...原创 2019-07-05 22:15:05 · 503 阅读 · 0 评论 -
多任务之异步调用--线程池的应用
线程池在日常开发过程中使用的频率还是很高的,在这里整理下自定义线程池的创建方式,原理方面就不赘述了。 1 常规线程池的定义 @Slf4j public class NormalTreadPool { /** * 默认最大并发数以jvm可用处理器的数量的两倍 */ private static final int DEFAULT_MAX_CONCURRENT =...原创 2019-07-07 10:49:14 · 707 阅读 · 0 评论 -
并发编程之并发队列
JDK 中提供了一系列场景的并发安全队列。总的来说,按照实现方式的不同可分为阻塞队列和非阻塞队列,前者使用锁实现,而后者则使用CAS 非阻塞算法实现。 1 非阻塞队列–ConcurrentLinkedQueue ConcurrentLinkedQueue是无界非阻塞队列,内部使用单项链表实现;其中有两个volatile 类型的Node 节点分别用来存放队列的首、尾节点。从下面的无参构造函数可知,默...原创 2019-07-20 22:45:21 · 149 阅读 · 0 评论