
多线程
文章平均质量分 65
keepfocus!
多听多看多思考
展开
-
volatile与缓存一致性
最近在深入分析volatile关键字的实现原理,内存屏障、缓存一致性、store buffer、invalid queue等知识看了不少,但接触的资料比较零散,无法完整的把相关内容串联起来,所以抽空做些整理,也算对这段时间的学习做一个小结。众所周知,volatile最主要的特性是保证了变量的可见性,即任意线程总能读到对volatile变量的最后写入(最新值)。而可见性正是依靠缓存一致性、内存屏障等机制协同运作来保证的。下面先就volatile与缓存一致性协议之间的关系分享下一点个人理解。缓存一致性计算原创 2021-01-27 15:25:39 · 1573 阅读 · 1 评论 -
volatile与内存屏障
volatile的作用1.保证变量的可见性2.局部限制指令重排(指令重排存在多种情况:1.编译器重排;2.处理器并行重排;3.因为store buffer,invalid queue等异步机制的存在导致的内存重排)为了达到这两个目的,volatile做了两件事情:1.禁止编译器的优化和重排2.通过内存屏障限制处理器重排首先明确下排序规则,简单总结如下(参考JSR-133)a.第二个操作为volatile写,则无论第一个操作是什么,都无法重排序;b.第一个操作为volatile读,则无论第二个原创 2021-01-27 15:21:52 · 553 阅读 · 1 评论 -
jdk线程池学习笔记
ThreadPoolExecutor:1.线程池的线程存储在HashSet中,处理流程:core pool->blocking queue->max pool->reject policy;2.核心线程池一般不会回收,除非设置了allowCoreThreadTimeOut,线程空闲时处于驻留状态(LockSupport.park);3.keepAliveTime对于超过核心线程数部分的线程有效,超过空闲时间会回收。Runnable vs. Callable:runnable无返回原创 2021-02-20 16:05:13 · 281 阅读 · 3 评论 -
浅析同步队列器AbstractQueuedSynchronizer和ReentrantLock
AbstractQueuedSynchronizer队列同步器AbstractQueuedSynchronizer是整个JUC锁框架的基石,通过同步状态量state、CAS、ConditionObject等组件和一系列操作实现线程间的状态同步,也是CountDownLatch、Semaphore等并发工具的实现基础。队列同步器包含下列核心组件:1.同步变量state,volatile修饰,CAS操作更新,两者保证状态一致性;2.内部类Node,代表竞争同步资源的线程节点,包含指向前后节点的引用,当存原创 2021-02-08 16:14:36 · 219 阅读 · 0 评论 -
java 线程状态和常用方法
on object moniter 意味着当前线程未持有锁Thread.sleep() vs. LockSupport.park()a.两者都释放cpu执行权,但未释放锁;b.两者均可响应中断(t.interrupt()),但Thread.sleep()需要捕获中断异常,并且重置中断状态,LockSupport.park()直接向下执行,并且不会重置中断状态;c.LockSupport.park()可以通过ockSupport.unpark(t)唤醒,Thread.sleep() 只能等待睡眠时..原创 2021-01-28 23:08:33 · 127 阅读 · 0 评论