并发编程
文章平均质量分 90
又菜又爱玩٩( ö̆ ) و
人菜就要多学习
展开
-
BlockingQueue底层原理以及AQS源代码解析
BlockingQueue特征队列是一种存储数据的数据结构,符合先进先出(FIFO)的原则。阻塞队列BlockingQueue是Java.concurrent.util包下的并发容器,除了符合队列的特点之外,还是线程安全的,保证在一个JVM中同一时刻只会有一个线程进行入队和出队操作。适用于解决并发生产者 - 消费者问题,在源代码的注释中有生产-消费示例: class Producer implements Runnable { private final BlockingQueue queue原创 2021-12-09 15:26:44 · 978 阅读 · 0 评论 -
ReentrantLock底层原理以及AQS源代码解析
使用ReentrantLock进行同步ReentrantLock lock = new ReentrantLock(false);//创建lock实例,false为非公平锁,true为公平锁 lock.lock() //加锁 lock.unlock() //解锁ReentrantLock是一种类似synchronized的互斥锁;需要手动加锁与解锁(显式锁);支持公平锁与非公平锁;可重入。 基于AQS框架的应用实现,通过定义内部类Sync来实现AbstractQueuedSynchronizer(原创 2021-12-08 16:08:27 · 785 阅读 · 1 评论 -
synchronized底层原理
线程安全问题对于多线程访问临界资源(共享资源)这种情况,我们要保证同一时刻只能有一个线程访问临界资源,实现线程安全。Java 中提供了两种方式来保证多线程访问临界资源的同步:synchronized和Lock。其中synchronized是隐式锁,内置锁;lock是显式锁。synchronized原理synchronized是基于JVM内置锁实现,通过内部对象Monitor(监视器锁)实现。在jdk1.6之前还是一个重量级锁,性能较低,依赖底层操作系统的Mutex lock实现互斥。操作系统分为用户空原创 2021-12-07 17:55:54 · 565 阅读 · 0 评论 -
CPU多级缓存结构以及缓存一致性协议MESI
CPU多级缓存结构现代CPU分为物理核和逻辑核,比如我们日常办公电脑常见的4核8线程,就是指的4个物理核、8个逻辑核。超线程的技术使得一个物理核可以同时做两件事,也就是执行两个线程,但是能真正执行两个线程的场景很少。Java中API获取的核数,就是指的逻辑核。CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。现代CPU为了提升执行效率,减少CPU与内存的交互(交互影响CPU效率),一般在CPU上集成了多级缓存架构,常见的为三级缓存结构L1 Cache,分原创 2021-12-03 17:44:13 · 1920 阅读 · 0 评论 -
Java内存模型解析
Java内存模型JMM示意图Java内存模型,Java Memory Model(简称JMM),控制了Java线程之间的通信。线程之间的共享变量存储在主内存中,每个线程都有一个自己私有的本地内存,本地内存中存储了该变量以读/写共享变量的副本。如图:Java线程通信Java并发采用的是共享内存模型,线程之间共享程序的公共状态,并通过写-读主内存中的公共状态来隐式进行通信。如果线程 A 和线程 B 通信,要两个步骤:1、线程 A 需要将本地内存 A 中的共享变量副本刷新到主内存去2、线程 B原创 2021-12-03 11:39:02 · 347 阅读 · 0 评论 -
volatile和synchronized到底啥区别?多图文讲解告诉你
之前写了几篇 Java并发编程的系列 文章,有个朋友微群里问我,还是不能理解volatile和synchronized二者的区别, 他的问题主要可以归纳为这几个: volatile 与 synchronized 在处理哪些问题是相对等价的? 为什么说 volatile 是 synchronized 弱同步的方式? volatile 除了可见性问题,还能解决什么问题?...转载 2020-03-09 10:55:43 · 143 阅读 · 0 评论 -
Java并发容器
本文整理自Java并发编程目录一、阻塞队列1.1 什么是阻塞队列1.12个附加操作:1.24个处理方式 1.2 Java阻塞队列 1.2.1ArrayBlockingQueue1.2.2LinkedBlockingQueue1.2.3PriorityBlockingQueue1.2.4DelayQueue1.2....原创 2019-08-31 15:07:36 · 137 阅读 · 0 评论 -
Java线程池以及Executor框架
本文整理自Java并发编程目录一、线程池实现原理线程池执行execute的四种情况:二、线程池的使用2.1创建线程池2.1.1.corePoolSize(线程池基本大小)2.1.2.runnableTaskQueue(任务队列)2.1.3.maximumPoolSize(线程池最大数量)2.1.4.RejectedExecutionHandler(饱和策略)...原创 2019-08-31 01:26:23 · 185 阅读 · 0 评论 -
并发工具类
本文整理自Java并发编程目录1 等待多线程完成的CountDownLatch2 同步屏障CyclicBarrier3 CyclicBarrier和CountDownLatch的区别4 控制并发线程数的SemaphoreJDK并发包里提供了几个非常有用的并发工具类。CountDownLatch,CyclicBarrier和Semaphore工具类提供了一种并发流程控制的...原创 2019-06-25 22:41:48 · 128 阅读 · 0 评论 -
原子操作类
本文整理自Java并发编程目录原子更新基本类型原子更新数组原子更新引用类型原子更新字段类java从1.5开始提供了Atomic包,在Atomic包里一共提供了12个类,属于4种类型的原子更新方式。分别是原子更新基本类型,原子更新数组,原子更新引用和原子更新属性。Atomic包里的类基本都是使用Unsafe实现的包装类。1.71.8原子更新基本类型...原创 2019-06-24 21:55:09 · 333 阅读 · 0 评论