摘要:[TOC] 1. 概述 很多同学对ThreadLocal并不陌生, 但是可能大多数同学可能是知其然不知其所以然, 所以今天就来分析一下ThreadLocal中的奥妙. 个人知识面不是很广, 很多知识综合不起来, 本文只是针对ThreadLocal的源码进行解析. 2. 实战 先来看一个示例吧. 看起
阅读全文
摘要:[TOC] 1. 概述 锁在实际使用时只是明白锁限制了并发访问, 但是锁是如何实现并发访问的, 同学们可能不太清楚, 下面这篇文章就来揭开锁的神秘面纱. 2. 锁的内存语义 当线程获取锁时, JMM会把线程对应的本地内存置为无效. 从而使得被监视器保护的临界区的变量必须从主内存中读取. 当线程释放锁
阅读全文
摘要:[TOC] 1. 概述 由于线程有本地内存的存在, 一个线程修改的共享变量不会及时的刷新到主内存中, 使得另一个线程读取共享变量时读取到的仍旧是旧值, 就导致了内存可见性问题. 现在volatile就可以解决这个问题, 为什么能解决内存可见性问题呢? 本文就来揭开volatile的神秘面纱. 2.
阅读全文
摘要:在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。为了实现某些功能有时会禁止某些重排序,由此引入了内存屏障。 一、重排序 重排序虽然可以提高程序性能,但是编译器和处理器不会改变存在数据依赖关系的两个操作的执行顺序。 即:编译器和处理器在重排序时,会遵守数据依赖性。 这里说的数据依赖性仅
阅读全文
摘要:一、概述 在多线程并发编程中 synchronized 一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着 Java SE 1.6 对 synchronized 进行了各种优化之后,有些情况下它就并不那么重了。 本文详细介绍 Java SE 1.6 中为了减少获得锁和释放锁带来的性能消耗而引入
阅读全文
摘要:[TOC] 1.概述 本文主要对Java中的关于并发的类的使用写一遍Demo. 具体涉及到的类有: 1. CountdownLatch 2. CyclicBarrier 3. Semaphore 2.CountdownLatch CountdownLatch类位于java.util.concurre
阅读全文