自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 java并发编程 CyclicBarrier详解

CyclicBarrier在执行过程中有一个线程如果出现破坏栅栏情况,之后的其他线程的await方法都会抛出异常,CyclicBarrier可以平替CountDownLatch使用,CountDownLatch是使用AQS的公平锁实现,CyclicBarrier使用可重入锁ReentrantLock 实现,且可以支持一个runnable运行。可以通过合适的场景选用合适的类。

2023-09-12 19:32:54 237

原创 java并发编程 CopyOnWriteArrayList详解

从上述方法中可以看到CopyOnWriteArrayList是通过ReentrantLock 保证线程安全,对内部数组的操作是通过每次都是复制一个长度+1的新数组去存放元素。删除元素同理,对于读取数据并没有加锁。

2023-09-12 11:45:56 309

原创 java并发编程 CountDownLatch详解

CountDownLatch 利用了AQS的共享锁队列实现了线程同步等待操作全部完成后执行下步操作。到达指定点的线程countDown让共享资源state -1,await方法会阻塞住当前线程,只有当countDown把state变成0时会ReleaseShared唤醒队列中的线程。

2023-09-11 22:39:16 226

原创 java并发编程 SynchronousQueue详解

利用transfer方法提供了两种实现,让多个线程之间可以去交换数据,它与其他队列的区别在于,不是用一个数据结构去永久的存储数据,这里你想把数据一定能给别人使用,只有阻塞等待别人来匹配,用offer的方式,此时head == null 就会立马失败返回null。

2023-09-11 16:03:49 429

原创 java并发编程 ConcurrentLinkedQueue详解

相对于LinkedBlockingQueue, 它实现了无锁化的方式。因为cas+for这种方式的逻辑很难梳理。所以大致了解思路吧。

2023-09-10 16:13:39 622

原创 java并发编程 PriorityBlockingQueue详解

PriorityBlockingQueue是一个小顶堆的数据结构的类,使用了ReentrantLock来保证线程安全。可以通过传入的比较器去自定义小顶堆的比较规则,或者实现Comparable接口。

2023-09-03 17:13:11 531

原创 java并发编程 LinkedBlockingDeque详解

LinkedBlockingDeque使用双端队列,通过ReentrantLock保证线程安全,实现了双端的线程安全的阻塞队列。

2023-09-03 15:58:44 441

原创 java并发编程 LinkedBlockingQueue详解

学习LinkedBlockingQueue需要掌握ReentrantLock 原理,或者了解其使用也行。java 并发编程系列文章目录LinkedBlockingQueue 是基于链表实现的阻塞队列。它相对于数组添加和删除的锁粒度变小,在增删方面线程同步阻塞的概率就会变小。同样也是用ReentrantLock来保证线程安全。置于和ArrayBlockingQueue谁的性能好,理论上来说LinkedBlockingQueue具有更高的吞吐,但是实际上还是看使用,这是不可预测的。

2023-09-03 15:12:44 453

原创 java并发编程 ArrayBlockingQueue详解

学习ArrayBlockingQueue需要掌握ReentrantLock 原理,或者了解其使用也行。添加和获取方法都分为阻塞式和非阻塞式通过ReentrantLock确保Object[] items的线程安全问题因为是数组,保证fifo的时候需要知道当前获取元素的下标和放入元素的下标,takeindex和putindex你追我赶的局面,因为是数组,当到达数组末尾的时候,需要重新到头。

2023-09-03 13:30:16 466

原创 java并发编程 系列文章目录

第一篇第二篇第三篇第四篇第五篇。

2023-09-03 11:57:56 139

原创 java并发编程 ReentrantReadWriteLock详解

基于AQS的能力,实现了尝试加锁和尝试释放锁的方法。把state的高16位作为state使用,还是利用原子自增自减的方式去保证原子性。读锁使用的AQS里的shard方法。ReentrantReadWriteLock把锁的粒度划分成读锁和写锁,读锁和读锁不互斥,减小了锁粒度。在实现方面,完全基于AQS实现。相关文章已在上面列出。

2023-09-03 11:46:42 537

原创 java并发编程 ReentrantLock详解

ReentrantLock 本质上是基于AQS实现的可重入锁,且提供了公平和非公平的机制,逻辑较为简单,需要对AQS熟练掌握。

2023-09-01 16:57:35 290

原创 java并发编程 AbstractQueuedSynchronizer(AQS)详解二

AbstractQueuedSynchronizer aqs ConditionObject详解,文章详细说明了核心方法的每个步骤的原理

2023-08-31 15:51:21 294

原创 java并发编程 AbstractQueuedSynchronizer(AQS)详解一

AbstractQueuedSynchronizer aqs详解,共享锁和排它锁的基础,文章详细说明了核心方法的每个步骤的原理

2023-08-31 15:47:57 449

原创 java 8 Stream,Optional的流库详解

java 8 的流库1.从迭代到流的操作1. Stream的两种 stream() | parallelStream()2. foreach()3. count()2.流的创建1. Stream.of(T... values)2. Stream.empty()3. Stream.generate()4. Stream.iterate()5. Stream.ofNullable(T)3.filter、map和flatMap方法1. filter()2. map()3. flatMap()4.抽取子流和组

2020-09-26 16:13:34 2153

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除