
Java并发编程
文章平均质量分 91
Java并发编程系列文章
Howinfun
不断深造
展开
-
关于 ReentrantReadWriteLock 的延续思考
ReentrantReadWriteLock 的边界场景思考,ThreadLocal的读写优化原创 2022-06-05 10:49:34 · 244 阅读 · 0 评论 -
并发编程之 AQS & ReentrantLock
1、AQSAQS:AbstractQueuedSynchronizer,抽象队列同步器。在Java并发包中提供的锁(java.util.concurrent.locks),都是利用 AQS 来实现的。AQS底层其实也是利用 CAS 来共同实现锁的机制。AQS 内部核心的参数:state:用于记录锁的同步状态,AQS底层的核心字段。但是,在ReentrantLock、ReentrantReadWriteReadLock的用法又是不太一样的。head:如果线程获取锁失败,会进入队列等待,其中h原创 2022-05-28 11:40:03 · 250 阅读 · 2 评论 -
并发编程 之 CAS
并发编程基础之CAS及JDK原子类原创 2022-05-26 20:48:34 · 304 阅读 · 0 评论 -
简单使用JDK封装好的Future模式
一般Future都是和Callable配合使用的。Future模式非常适合在处理耗时很长的业务逻辑时进行使用,可以有效旳减小系统的响应时间和提高系统的吞吐量。1、下面看一下例子。public class UserFuture implements Callable<String>{ //任务要实现Callable接口然后重写call方法 private String para; ...原创 2018-06-28 18:00:57 · 636 阅读 · 0 评论 -
关于信号量Semaphore
如何解决高并发:1、网络层面2、服务层面:业务最主要。分流,负载均衡等等。Nginx3、Java代码:限流策略下面是讲Java中的限流,keyi使用的是Semaphore。public class UseSemaphore { public static void main(String[] args) { final Semaphore semaphore = new Semaphore(...原创 2018-06-28 18:15:53 · 462 阅读 · 0 评论 -
Java并发编程的艺术-Java并发编程基础
第4章 Java并发编程基础原创 2019-08-23 14:46:41 · 782 阅读 · 2 评论 -
Java并发编程的艺术-阅读笔记和思维导图
<Java并发编程的艺术>>,笔记(MarkDown格式)和思维导图。原创 2019-08-23 14:33:27 · 736 阅读 · 0 评论 -
利用双重检查锁定和CAS算法:解决并发下数据库的一致性问题
利用双重检查锁定和CAS算法,解决并发下数据库的一致性问题原创 2019-09-02 20:10:00 · 1066 阅读 · 0 评论 -
简单使用CyclicBarrier
假设有一个场景:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没准备好,大家都得等待。直接上代码:public class UseCyclicBarrier { static class Runner implements Runnable{ private String name; private CyclicBarrier cb; //传入CyclicBa...原创 2018-06-28 17:48:13 · 424 阅读 · 0 评论 -
简单使用CountDownLatch
CountDownLatch的常用场景:他经常用于监听某些初始化操作,等初始化操作执行完毕后,通知主线程继续工作。假设一个场景,例如你要使用Controller的某个方法,但是必须先实例化两个service,等两个service实例化好才能进行调用Controller的方法。1、下面直接给个例子看看。假如有三个线程,线程2和线程3执行完,线程1才会被唤醒继续执行public static void...原创 2018-06-28 17:18:54 · 557 阅读 · 0 评论 -
详解Executors创建3种类型的ThreadPoolExecutor线程池
最近在学习比较基础的并发编程,做了一下笔记顺便写写到博客这里。1、newFixedThreadPool()创建固定长度的线程池,每次提交任务创建一个线程,直到达到线程池的最大数量,线程池的大小不会变化。特点是可以重用固定数量线程的线程池。它的构造源码如下:public static ExecutorService newFixedThreadPool(int nThreads) { ...原创 2018-06-13 19:11:59 · 1304 阅读 · 0 评论 -
并发编程的MasterWorker模式
Master-Worker模式是常用的并发计算模式,它的核心思想是系统由两类进程协作工作:Master进程和Worker进程。Master负责接收和分配任务。Worker负责处理子任务。当各个Worker进程处理完成后,会将结果返回给Master,有Master做归纳和总结。其好处是能将一个大任务分解成若干个小任务,并行执行,从而提高系统的吞吐量。下面我自己将会介绍一下代码怎么写,可能表达能力有点...原创 2018-06-13 19:29:40 · 354 阅读 · 0 评论 -
生产者消费者模式
这个模式非常的简单,就是生产者生产出东西,而消费者消费生产者的产物。1、首先,我们在主方法里面创建一个队列来存放生产者生产的东西,使用LinkedBlockingQueue,因为这个队列是实现了读写分离的,生产者和消费者并发执行。然后创建一个线程池来执行生产者和消费者,所以生产者和消费者都要实现Runnable接口。public class Main { public static void m...原创 2018-06-14 12:56:58 · 309 阅读 · 0 评论 -
简述超类Object的锁和CountDownLatch类
先简单说一下关于线程通信的概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把控与监督。1、使用超类Object的wait/notify方法实现线程间的通信,因为Object是超类,所以Java所有的对象都提供了...原创 2018-06-15 14:23:25 · 395 阅读 · 0 评论 -
同步类容器和并发类容器
同步类容器都是线程安全的,但是某些场景下可能需要加锁来保护复合操作。复合类操作如:迭代(反复访问元素,遍历完容器中所有的元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发地修改容器时,可能会表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由于早期迭代器设计的时...原创 2018-06-16 17:46:23 · 271 阅读 · 0 评论 -
Copy-On-Write容器的简述
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。JDK里的COW容器有两种:CopyOnWriteArrayList和CopyOnWriteArraySet。COW容器非常有用,可以在非常多的并发场景中使用到。下面简单介绍一下什么是COW容器:CopyOnWrite容器即写时复制的容器。通俗的理解就是当我们往一个容器中添加元素时,不直接往当前容器添加,而是先将当前容器进行复制...原创 2018-06-17 10:16:34 · 763 阅读 · 0 评论 -
可重入锁ReentrantLock的使用
这两天抽了点时间看了关于ReentrantLock的博客,上一篇的就是其中一篇。自己看完也来复习一下先。ReentrantLock是一个可重入的互斥(独占)锁,又称为“独占锁”。ReentrantLock通过自定义队列同步器(AQS-AbstractQueuedSynchronized,是显示锁的关键)来实现锁的获取与释放。其可以完全替代synchronized关键字。JDK5.0早期,其性能远好...原创 2018-06-29 16:13:34 · 389 阅读 · 0 评论 -
并发队列之ConcurrentLinkedQueue
先简单的介绍一下:在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列(这篇推文将要介绍的队列),一个是以BlockingQueue接口为代表的阻塞队列,无论哪一种都继承自Queue接口。那么下面将介绍一下高性能的ConcurrentLinkedQueue:它是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常Concu...原创 2018-06-19 09:42:32 · 957 阅读 · 0 评论 -
关于读写锁-ReentrantReadWriteLock
读写锁ReentrantReadWriteLock,其核心就是实现读写分离,多哦,突然记得之前学的COW容器也是读写分离的。好了,读写分离有什么好处了,就是在高并发访问下,尤其是读多写少的情况下,性能要远高于重入锁。之前学synchronized、ReentrantLock的时候,我们都知道,同一时间内,只能有一个线程进行访问被锁定的代码,那么读写锁则不同,其本质是分成两个锁,就是读锁和写锁。在读...原创 2018-07-01 11:15:06 · 343 阅读 · 0 评论 -
并发Queue之BlockingQueue接口及其实现类
1、下面先简单介绍BlockingQueue接口的五个实现:ArrayBlockingQueue:基于数组的阻塞队列实现,在ArrayBlockingQueue内部,维护了一个定长的数组,以便缓存队列中的数据对象,其内部没实现读写分离,也就意味着生产和消费者不能完全并行。长度是需要定义的,可以指定先进先出或者先进后出,因为长度是需要定义的,所以也叫有界队列,在很多场合非常适合使用。LinkedBl...原创 2018-06-20 15:17:21 · 3892 阅读 · 0 评论