
并发编程
文章平均质量分 90
Nice2cu_Code
立志成为一个前端、后端、测试全方位发展的程序员
展开
-
堆内存分配的并发问题
在实际的开发过程中,会经常的创建对象,作为虚拟机,必须保证线程安全。通常来讲虚拟机采用两种方式保证线程安全一、CAS + 失败重试CAS是一种乐观锁的实现方式,每次不加锁假设没有冲突的去完成某项操作,如果因为冲突导致操作失败就重试,直到成功为止。详见博客,传送地址:Java并发编程之 无锁(CAS)二、TLABTLAB是在Java堆空间的伊甸园划分出来的针对每个线程的内存空间,专门在该区域为该线程创建的对象分配内存。它的主要目的是在并发环境下进行内存分配的时候,减少线程之间对于内存空间的竞争,加速原创 2021-07-30 20:04:23 · 987 阅读 · 0 评论 -
ThreadLocal内存泄漏问题
ThreadLocal原理阅读本文章之前,需要先了解Java中强软弱虚的概念,传送地址:Java中强软弱虚四种引用详解文章目录ThreadLocal原理一、介绍二、快速入门三、ThreadLocal与synchronized的区别四、ThreadLocal内部结构五、ThreadLocal核心方法源码1. set方法2. get方法六、弱引用的使用1. 为什么要使用弱引用?2. 使用弱引用后是否依然存在内存泄漏?3. 线程池归还线程必须清理Map一、介绍可以解决多线程的数据安全问题,将当前线程关联原创 2021-07-25 09:36:53 · 238 阅读 · 1 评论 -
interrupt、interrupted 、isInterrupted 区别
interrupt、interrupted 、isInterrupted 区别文章目录interrupt、interrupted 、isInterrupted 区别一、interrupt二、interrupted三、isInterrupted一、interrupt一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。而 Thread.interrupt() 的作用其实也不是中断原创 2021-07-19 21:33:01 · 1235 阅读 · 0 评论 -
AQS源码分析
深入ReentrantLock底层原理文章目录深入ReentrantLock底层原理一、AQS简介1. 成员变量2. Node节点3. 继承关系二、获取锁源码分析1. 加锁过程中的一个问题三、锁发生竞争源码分析1. 锁重入的体现2. 竞争锁时的一个问题3. t3线程入队的情况四、解锁源码分析一、AQS简介抽象队列同步器 AbstractQueuedSynchronizer 简称AQS,它是同步器的基础组件,JUC各种锁的底层实现均依赖于AQS1. 成员变量state 表示锁状态值为0表原创 2021-07-19 18:19:19 · 1063 阅读 · 2 评论 -
为什么StringBuilder线程不安全?
StringBuilder线程不安全的原因文章目录StringBuilder线程不安全的原因一、现象分析二、为什么输出值跟预期值不一样三、为什么会抛出异常四、StringBuffer线程安全的原因一、现象分析先上结论,StringBuilder不是线程安全的,StringBuffer是线程安全的,这篇文章就探究一下底层原理。在分析设个问题之前要知道StringBuilder和StringBuffer的内部实现跟String类一样,都是通过一个char数组存储字符串的,不同的是String类里面的ch原创 2021-06-17 12:10:12 · 4583 阅读 · 3 评论 -
Java并发编程之 并发队列
并发队列文章目录并发队列一、无阻塞队列1. ConcurrentLinkedQueue二、阻塞队列1. ArrayBlockingQueue2. LinkedBlockingQueue3. SynchronousQueue4. PriorityBlockingQueue5. DelayQueueConcurrentLinkedQueue 并发无阻塞队列,BlockingQueue 并发阻塞队列,二者均实现自 Queue 接口所有的并发队列中都不允许加入null值一、无阻塞队列1. Concur原创 2021-03-26 21:52:44 · 725 阅读 · 0 评论 -
Java并发编程之 常用并发工具类
并发工具类文章目录并发工具类一、CountDownLatch1. 概念2. 代码示例二、CyclicBarrier1. 概念2. 代码实现三、Semaphore1. 概念2. 代码实现3. 公平性四、Exchanger1. 概念2. 代码实现五、ReentrantReadWriteLock1. 概念2. 代码实现六、StampedLock1. 概念2. 写锁3. 乐观读锁4. 悲观读锁一、CountDownLatch1. 概念可以将其理解为一个计数器,创建实例时,构造器中赋予计数器的初始值,实例每原创 2021-03-26 16:39:59 · 583 阅读 · 0 评论 -
Java并发编程之 线程池
线程池文章目录线程池一、概述二、参数介绍三、ExecutorService接口的介绍1. 接口中常用方法2. 获取接口实例四、带缓存线程池五、固定大小线程池六、单线程线程池七、ScheduledExecutorService接口的介绍1. 接口中常用方法2. 获取接口实例八、时间调度线程池九、拒绝策略1. AbortPolicy2. CallerRunsPolicy3. DiscardOldestPolicy4. DiscardPolicy5. 自定义拒绝策略十、自定义线程池十一、ThreadFactor原创 2021-03-26 16:31:50 · 6092 阅读 · 4 评论 -
Java并发编程之 无锁(CAS)
共享模型之无锁文章目录共享模型之无锁一、CAS 与 volatile1. CAS2. volatile3. 为什么无锁效率高4. CAS 的特点二、原子整数三、原子引用1. AtomicReference2. ABA 问题3. AtomicStampedReference4. AtomicMarkableReference四、原子数组五、原子更新器六、原子累加器LongAdder一、CAS 与 volatileAtomicInteger 的使用举例//创建实例AtomicInteger balan原创 2021-03-26 16:24:28 · 708 阅读 · 0 评论 -
Java并发编程之 volatile原理
共享模型之内存文章目录共享模型之内存一、Java内存模型二、JMM特点1. 可见性(1) 不可见的情况(2) 出现的原因(3) 解决方法(4) 可见性 vs 原子性2. 有序性三、volatile原理1. 如何保证可见性2. 如何保证有序性3. 注意一、Java内存模型Java 内存模型即 JMM,它从java层面定义了主存(所有线程都共享的数据,比如成员变量等)、工作内存(指的是线程私有的数据,比如局部变量等)JMM 体现在以下几个方面:原子性 - 保证指令不会受到线程切换的影响,比如 syn原创 2021-03-18 09:38:41 · 327 阅读 · 1 评论 -
Java并发编程之 ReentrantLock 介绍
ReentrantLock文章目录ReentrantLock一、活跃性问题1. 死锁2. 活锁3. 饥饿二、ReentrantLock1. 基本介绍2. 可重入3. 可打断4. 锁超时5. 公平锁6. 条件变量一、活跃性问题活跃性:代码是有限的,但由于某种原因代码一直执行不完活跃性有三种情况:死锁、活锁、饥饿活跃性相关的一系列问题都可以用 ReentrantLock 进行解决1. 死锁双方都持有对方需要的锁,且不解锁,都在等待对方释放锁,导致二者谁都无法进行下去@Slf4j(topic =原创 2021-03-17 15:12:09 · 350 阅读 · 2 评论 -
Java并发编程之 park & unpark 方法
park & unpark文章目录park & unpark1 基本使用2 park & unpark 原理先调用park再调用unpark的过程先调用unpark再调用park的过程1 基本使用它们是 LockSupport 类中的方法// 暂停当前线程,在哪个线程中调用就对哪个线程进行操作,此线程进入wait状态(阻塞状态)LockSupport.park();// 恢复某个线程的运行,参数中传递需要恢复的线程// unpark方法可以在park之前 / 之后调用原创 2021-03-16 21:15:34 · 1483 阅读 · 0 评论 -
Java并发编程之 锁升级过程
阅读本文档前需了解的前置知识:进程和线程的概念并发和并行的概念创建线程的三种方式线程常见方法线程的五种状态及其转换synchronized优化原理文章目录synchronized优化原理一、Monitor介绍1. 对象头2. Monitor原理二、synchronized原理1. 轻量级锁2. 锁膨胀3. 自旋优化4. 偏向锁(1) 概念(2) 偏向状态(3) 偏向锁失效的情况i. 调用hashcode()方法ii. 其他线程使用对象iii. 调用wait / notify()方法(4)原创 2021-03-15 21:46:35 · 344 阅读 · 0 评论