![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 93
并发编程系列文章
小沈同学呀
JAVA程序猿一枚,擅长分布式微服务、高并发、多线程等常规架构。记录成为架构师之路的点滴,分享工作中的各种疑难杂症。
展开
-
分析与实战:高性能读写印戳锁StampedLock
印戳锁StampedLock是一个高性能的读写锁,使用CLH队列来保存等待线程节点,STATE来标识资源加解锁。印戳锁内部提供了读锁、写锁、乐观读锁,当使用乐观读锁的时候其他线程是可以继续加写锁,只是在乐观读锁线程进行数据操作时候需要进行数据验证,以保证数据一致性。原创 2023-05-25 13:53:35 · 966 阅读 · 18 评论 -
深入分析实战可重入读写锁ReentrantReadWriteLock
在读多写少的情况下可重入锁ReentrantLock可能不是那么完美,比如缓存的写入和读取。今天,我们就引出可重入读写锁ReentrantReadWriteLock,其读写分离的机制,大大提升缓存场景的系统性能。原创 2023-05-22 15:17:29 · 918 阅读 · 13 评论 -
并发编程之循环屏障CyclicBarrier
CyclicBarrier循环屏障是多线程并发编程中的常用同步类,我们可以用它来实现多个线程相互等待,并且可重用。其中的dowait()方式是核心方法,用可重入锁ReentrantLock保证了方法逻辑同步功能,使用Condition的await()、signalAll()方法来阻塞和唤醒线程。原创 2023-05-08 14:03:50 · 504 阅读 · 21 评论 -
并发编程之可重入锁ReentrantLock
今天的博文我们讲述了ReentrantLock与Synchronized的区别联系,也解析了ReentrantLock可重入、可中断、超时机制以及conditon变量的源码。通过源码我们可以知道ReentrantLock 是通过AQS保证同步,其他的中断机制、超时机制、以及condition变量也都是基于AQS中的相应底层代码。在实际的开发过程中,我们可以根据自身业务场景选择应用ReentrantLock方法,从而增加系统的健壮性和可维护性。原创 2023-04-25 16:22:05 · 879 阅读 · 20 评论 -
线程等待其他线程执行同步类CountDownLatch
本文我们讲述了CountDownLatch 是通过AQS抽象阻塞队列实现同步功能的,又说到了awat()方法本质是调用AQS加入阻塞队列的方法,countDown本质是调用AQS释放共享锁的方法。对于最很重要的唤醒阻塞线程逻辑,也是通过CountDownLatch 覆写tryReleaseShared()方法达到满足释放共享锁条件的,在AQS释放共享锁中如果阻塞队列存在阻塞线程会唤醒线程。原创 2023-04-20 15:44:03 · 801 阅读 · 13 评论 -
多线程控制并发数目工具类Semaphore
多线程控制并发数目工具类Semaphore内部继承AQS抽象阻塞队列,并继承了其同步获取、释放资源的方法。Semaphore提供了acquire()获取许可、release()释放许可方法,底层当然调用的是AQS内部方法来满足同步以保证限制并发线程运行数目。原创 2023-04-06 14:05:56 · 850 阅读 · 21 评论 -
并发编程之ForkJoin并行处理框架
通过本篇文章我们知道了ForkJoin并行框架一个将任务‘分而治之’的并行架构,我们可以通过ForkJoinTask 实现一个具体的并行任务类,并用fork()\join()方法实现任务的分解和结果合并,再将ForkJoinTask 通过 ForkJoinPool并行线程池进行submit()创建ForkJoinWorkerThread执行。原创 2023-03-23 15:17:29 · 697 阅读 · 9 评论 -
并发基础之Callable与Future获取异步执行结果
在多线程编码需要获取线程异步执行结果的情况下,我们推荐使用实现Futrue 接口的方式,它比Callable方式多了很多的操作执行线程的方法,比如 cancel() 取消执行、isCancelled () 获取是否取消状态、isDone() 任务是否完成等等。在实际的开发中,我们也推荐使用多线程来创建Futrue获取执行结果。原创 2023-03-20 13:45:24 · 800 阅读 · 1 评论 -
并发基础之线程池(Thread Pool)
线程池(Thread Pool)的灵活运用是多线程开发以满足高并发场景的一大利器,在开发高并发功能业务时候,应当合理使用多线程。特别是应当理解Executors、 ThreadPoolExecutor 核心类源码设计,以便于我们创建出适宜的线程池。原创 2023-03-16 14:22:08 · 3255 阅读 · 5 评论 -
并发基础之Java内存模型JMM
JMM内存模型就是解决线程之间通信,也就是一个线程对共享内存变量修改何时对另一个线程可见。JMM内存模型定义了多线程与共享变量的抽象关系:线程中的所有共享变量保存在主存中,也就是堆内存中,每个线程都有自己的本地内存,本地内存包含对对共享变量的副本拷贝,且本地内存并不真实存在只是一种抽象模型。原创 2023-03-13 15:11:46 · 453 阅读 · 2 评论 -
并发基础之抽象同步队列AQS
AQS是位于java.util.concurrent.locks 包下的 AbstractQueuedSynchronizer类,是构建同步器和锁的基础框架。JAVA JUC并发包下的工具类都是基于AQS实现,其原理都是通过state状态来确定线程是否占用资源,未拿到锁的线程则放置在CLH虚拟双向队列末尾,后续通过AQS通知抢占资源。原创 2023-03-09 16:40:39 · 509 阅读 · 1 评论