并发与线程
文章平均质量分 88
李承一
这个作者很懒,什么都没留下…
展开
-
KafkaConnect Offset存储设计
KafkaConnect Offset存储设计原创 2023-02-09 00:37:07 · 651 阅读 · 0 评论 -
java中的RabbitMq
1、创建连接到RabbitMq服务器的连接 在RabbitMq所有的操作都是在信道中完成的。信道是建立在真实的TCP连接内的虚拟连接,应用程序通过TCP连接到RabbitMQ,在TCP没有关闭的情况下再通过创建信道发送AMQP命令。每条信道都会有专门的唯一ID进行标记,这点RabbitMq会帮你记住。RabbitMq使用信道的原因(摘抄网上的,因为写的不错)1. TCP的创建和销...原创 2018-10-24 11:28:59 · 536 阅读 · 0 评论 -
ReentrantLock的非公平锁AQS队列实现
以下以ReentrantLock的NofaiySync分析AQS(又或者说CLH变种)的实现方式。1、尝试获取资源调用NofairSync的lock方法的时候,会先尝试对资源state加锁,失败的时候还会尝试获取锁。 final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread());原创 2020-09-24 23:56:57 · 1031 阅读 · 0 评论 -
ReentrantReadWriteLock死锁问题解析
1、案情代码分析:private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true); public static void main(String[] args){ // thread a new Thread(() -> { System.out.println("a第一次获取读锁");原创 2020-10-22 00:14:12 · 1746 阅读 · 0 评论 -
CyclicBarrier源码解析
和CountDownLatch不同,CyclicBarrier表示调用await方法之后,线程会阻塞知道,知道一定数目的线程执行了await之后才会全部唤醒。而且CyclicBarrier还有两个功能点,支持重复使用和唤醒时回调。所以我们需要第一步了解到CyclicBarried是如何等待多个线程等待并且一起唤醒的。1、初始化CyclicBarrierCyclicBarrier默认的初始化比较简单,parties表示需要等待多少个线程await后才唤醒。 public CyclicB原创 2020-12-05 23:39:27 · 289 阅读 · 0 评论 -
CountDownLatch源码解析
文章只是简单记述下CountDownLatch的原理,看过AQS、ReentrantLock和ReentrantReadWriteLock的文章后,可以大致清楚了解和AQS相关工具的使用。CountDownLatch本身也是通过一个内部类Sync实现AQS,所以其构造方法内部也是实现如何去初始化这个Sync的过程。 public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentExc原创 2020-12-05 23:39:53 · 278 阅读 · 1 评论 -
ThreadLocal和维护全局Map<THread,Object>区别(摘自java并发编程实战3.3.3)
线程封闭作用: 当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步。这种技术被称为线程封闭,它是实现线程安全性的最简单方式之一。当某个对象封闭在一个线程中时,这种用法将自动实现线程安全性,即使被封闭的对象本身不是线程安全的。 维持线程封闭性的一种更规范方法是使用ThreadLocal,这个类能使线程中的某个值与保存值的对象关联起来。ThreadLocal提供了get/set等访问接口或方法,这些方法为每个使...原创 2020-10-11 15:33:00 · 379 阅读 · 0 评论