- 博客(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并发编程 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关注的人