并发
文章平均质量分 97
关于java并发编程的一些知识点的系统整理。
JinchaoLv
抄底上天台。
展开
-
Java并发系列(15)——synchronized之HotSpot源码解读(中)
上一篇:《Java并发系列(14)——synchronized之HotSpot源码解读(上)》文章目录10.5 轻量锁10.5.1 偏向锁升级轻量锁10.5.2 释放锁10.5.3 无锁直接加轻量锁10.5.4 重入10.5.5 mark word10.6 重量锁10.6.1 轻量锁升级重量锁10.6.2 示意图10.6.3 偏向锁升级重量锁10.6.4 直接加重量锁10.6.5 释放锁10.6.6 重入10.6.7 mark word10.5 轻量锁10.5.1 偏向锁原创 2020-12-16 22:41:04 · 310 阅读 · 1 评论 -
Java并发系列(14)——synchronized之HotSpot源码解读(上)
上一篇:《Java并发系列(13)——线程池的选择与参数设置》文章目录10 synchronized 实现原理10.1 研究思路10.1.1 输出 JVM 指令10.1.2 跟踪 JVM 源码10.2 预备知识10.2.1 对象头10.2.1.1 什么是对象头10.2.1.2 打印对象头10.2.1.3 小端存储10.2.2 用户态与内核态10.2.2.1 用户态与内核态10.2.2.2 用户线程与内核线程10.3 Hashtable 性能测试10.3.1 测试一10.3.2原创 2020-12-11 22:44:14 · 441 阅读 · 1 评论 -
Java并发系列(13)——线程池的选择与参数设置
接上一篇《Java并发系列(12)——ForkJoin框架源码解析》文章目录9.5 线程池的选择与参数设置9.5.1 JDK 预定义的线程池9.5.1.1 Executors#newCachedThreadPool9.5.1.2 Executors#newFixedThreadPool9.5.1.3 Executors#newScheduledThreadPool9.5.1.4 Executors#newSingleThreadExecutor9.5.1.5 Executors#newSin原创 2020-11-22 20:15:42 · 531 阅读 · 1 评论 -
Java并发系列(12)——ForkJoin框架源码解析
接上一篇《Java并发系列(11)——ThreadPoolExecutor实现原理与手写》文章目录9.4 ForkJoinPool9.4.1 demo9.4.2 初步认识9.4.3 工作线程状态9.4.4 位运算9.4.4.1 成员变量9.4.4.2 方法9.4.5 WorkQueue9.4.6 外部提交任务9.4.7 窃取任务9.4.8 执行父任务9.4.9 内部拆分任务9.4.9.1 不提交,直接 join9.4.9.2 不提交,直接 invoke9.4.9.3 subm原创 2020-11-09 21:29:22 · 1237 阅读 · 4 评论 -
Java并发系列(11)——ThreadPoolExecutor实现原理与手写
接上一篇《Java并发系列(10)——FutureTask 和 CompletionService》文章目录9 线程池9.1 JDK 线程池9.2 ThreadPoolExecutor9.2.1 参数9.2.1.1 corePoolSize,maximumPoolSize9.2.1.2 keepAliveTime,timeUnit9.2.1.3 workQueue9.2.1.4 threadFactory9.2.1.5 rejectExecutionHandler9.2.1.6 all原创 2020-10-19 12:43:01 · 283 阅读 · 0 评论 -
Java并发系列(10)——FutureTask 和 CompletionService
接上一篇《Java并发系列(9)——并发工具类》文章目录8 FutureTask 与 CompletionService8.1 FutureTask8.1.1 类图8.1.2 几个问题8.1.3 实现细节8.1.3.1 属性8.1.3.2 run 方法8.1.3.3 get 方法8.1.3.4 cancel 方法8.1.3.5 七种状态汇总8.1.3.6 isCancelled 方法8.1.3.7 isDone 方法8.2 CompletionService8.2.1 接口方原创 2020-10-17 21:13:17 · 296 阅读 · 2 评论 -
Java并发系列(9)——并发工具类
接上一篇《Java并发系列(8)——并发容器》文章目录7 并发工具类7.1 Semaphore7.1.1 核心方法7.1.2 demo7.1.3 注意点7.1.4 手写7.2 Exchanger7.2.1 核心方法7.2.2 demo7.2.3 注意点7.2.4 手写7.3 CountDownLatch7.3.1 核心方法7.3.2 demo7.3.3 注意点7.3.4 手写7.4 CyclicBarrier7.4.1 核心方法7.4.2 demo7.4.3 注意点原创 2020-09-15 01:50:20 · 209 阅读 · 0 评论 -
Java并发系列(8)——并发容器
接上一篇《Java并发系列(7)——AQS与显式锁实现原理》文章目录6 并发容器6.1 并发 HashMap6.1.1 HashTable6.1.2 ConcurrentHashMap6.1.2.1 jdk1.7 的实现6.1.2.1.1 数据结构6.1.2.1.2 构造方法6.1.2.1.3 get6.1.2.1.4 put6.1.2.1.5 remove6.1.2.1.6 rehash6.1.2.1.7 isEmpty6.1.2.1.8 size6.1.2.1.9 cont原创 2020-09-06 00:08:25 · 373 阅读 · 0 评论 -
Java并发系列(7)——AQS与显式锁实现原理
接上一篇《Java并发系列(6)——AQS与显式锁的使用》文章目录5.4 AQS 实现原理5.4.1 原理图5.4.1.1 数据结构5.4.1.2 AQS 如何管理线程5.4.1.3 AQS 是公平锁还是非公平锁5.4.2 核心源码5.4.2.1 acquire 方法5.4.2.2 release 方法5.4.2.3 acquireShared 方法5.4.2.4 releaseShared 方法5.4.2.5 await 方法5.4.2.6 signal 方法5.4.2.7 s原创 2020-07-24 20:20:51 · 341 阅读 · 0 评论 -
Java并发系列(6)——AQS与显式锁的使用
接上一篇《Java并发系列(5)——CAS与Java原子操作类》文章目录5 AQS 与显式锁5.1 显式锁5.1.1 ReentrantLock5.1.2 Condition5.1.3 公平锁与非公平锁5.1.4 synchronized 与显式锁对比5.1.5 ReentrantReadWriteLock5.2 AQS5.2.1 什么是 AQS5.2.2 为什么需要 AQS5.2.3 AQS 负责做什么5.3 AQS 快速上手5.3.1 基于 AQS 实现 Lock5.3.2原创 2020-07-20 01:44:09 · 293 阅读 · 3 评论 -
Java并发系列(5)——CAS与Java原子操作类
接上一篇《Java并发系列(4)——ThreadLocal实现原理与内存泄漏分析》文章目录4 CAS4.1 什么是 CAS4.2 CAS 的作用4.3 问题与解决办法4.3.1 CAS 只保证原子性,不保证可见性4.3.2 ABA 问题4.3.3 对于耗时操作的开销问题4.3.4 CAS 只能操作一个变量4.4 Unsafe 类4.4.1 获取 Unsafe 实例4.4.2 调用 Unsafe 方法4.5 JDK 原子操作类4.5.1 基本类型原子类4.5.1.1 使用示例4.原创 2020-07-10 21:53:14 · 267 阅读 · 0 评论 -
Java并发系列(4)——ThreadLocal实现原理与内存泄漏分析
接上一篇《java并发系列(3)——线程协作:wait,notify,join》文章目录3 ThreadLocal3.1 作用3.1.1 线程隔离3.1.2 线程上下文变量3.2 ThreadLocal 常用方法3.2.1 set,get3.2.2 remove3.2.3 初始值3.2 实现原理3.2.1 数据存储结构3.2.2 源码3.2.2.1 ThreadLocalMap3.2.2.2 ThreadLocal#set 方法3.2.2.3 ThreadLocal#get 方原创 2020-07-04 04:15:25 · 293 阅读 · 0 评论 -
手写 ThreadLocal
这是一个简易版的 ThreadLocal,实现了 ThreadLocal 的 set,get,及 remove 方法。原创 2020-07-04 03:59:40 · 386 阅读 · 1 评论 -
java并发系列(3)——线程协作:wait,notify,join
内容包括:wait 和 notify的使用;wait 和 notify 时线程做了哪些事情;对比了 wait 和 sleep 的异同;对比了 wait 导致的阻塞和 sleep,synchronized 导致的阻塞的异同;分析了 join 的代码实现。原创 2020-06-26 12:42:23 · 250 阅读 · 0 评论 -
利用wait/notify模拟消息队列
利用 wait/notify 模拟消息队列一个简易版的消息队列模型:这里一共有四种角色:queue:消息队列;Publisher:消息发布者,可以向任何一个队列发布消息;Listener:消息监听者,一个 Listener 同时只能监听一个 queue 的消息;但一个 queue 可同时被多个 Listener 监听;MqServer:消息队列服务器,负责管理所有的队列。首先定义 MqServer,queue 都在 MqServer 里面:package per.lvjc.concur原创 2020-06-26 12:12:15 · 371 阅读 · 0 评论 -
java并发系列(2)——线程共享,synchronized与volatile
接上一篇《java并发系列(1)——基本概念与Thread API》2.3 线程共享多个线程并发访问共享资源时,有可能产生线程安全问题。线程安全包括三个方面:原子性、可见性、有序性,也可以说是并发三大特性。2.3.1 cpu 缓存模型2.3.1.1 背景cpu 的运算是在一个容量较小但读写速度很快的寄存器上进行的,而数据是存储在计算机物理内存(主存)的。所以 cpu 需要从内存读取数据到寄存器进行运算,然后再把数据更新到内存。随着技术发展,cpu 运算速度飞速提升,而内存访问速度一直没有原创 2020-06-24 12:58:36 · 248 阅读 · 0 评论 -
java并发系列(1)——基本概念与Thread API
主要内容包括:并发相关基本概念,Java Thread 相关基本 API,及其对线程生命周期的影响。原创 2020-06-18 21:14:39 · 259 阅读 · 0 评论 -
让Thread#stop方法无法终止你的线程
众所周知,Thread 类有一个 stop 方法,可以用来终止线程。当然,这个方法连同 suspend,resume 方法一起都已经被弃用了。原因是 stop 方法终止线程过于暴力,不管被 stop 的线程在干什么,一旦被 stop 它就得立刻停止执行,然后释放锁,这是非常不安全的。那么,有没有办法,让被 stop 的线程继续执行,并且不释放锁呢?我写了一段代码,各位可以拿去试试:package per.lvjc.concurrent.stop;public class CanNotStopThr原创 2020-06-16 01:21:01 · 1344 阅读 · 0 评论