
Java并发
文章平均质量分 80
绕远的偶人
300字以内
展开
-
《Java并发编程实战》读书笔记——synchronized和ReentrantLock
1、synchronized确保线程互斥访问同步代码,synchronized和volatile都保证了内存可见性,解决了重排序(为了充分利用多核、多级缓存)。 内存可见性:每个CPU都有自己的缓存区,其他CPU上的线程无法看到该CPU对变量的修改。 synchronized和ReentrantLock一样,也是可重入的。为什么需要可重入,看如下代码,如果synchronized不是可...原创 2018-04-24 15:27:44 · 167 阅读 · 0 评论 -
《Java并发编程实战》读书笔记——AQS、CountDownLatch和CyclicBarrier
1、AQS,AbstractQueuedSynchronizer,抽象的队列式同步器,是一个抽象类,用了模板方法模式。作为模板类,定义了多线程访问共享资源的框架。维护一个volatile int state代表共享资源和一个FIFO线程队列,state可以表示Semaphore的数值、ReentrantLock的重入次数、CountDownLatch的数量等,ReentrantReadWriteL...原创 2018-04-23 20:01:07 · 302 阅读 · 0 评论 -
《Java并发编程实战》读书笔记——同步的方法、原子类、Unsafe类与CAS
1、同步的方法 (1)不在线程之间共享该状态变量(线程私有,如ThreadLocal); (2)将状态变量修改为不可变的变量(final,如果final变量里有可变变量,则不是不可变变量); (3)在访问状态变量时使用同步(synchronized,并发包的很多类,如ReentrantLock、CountDownLatch等等);2、原子类,用CAS自旋+volatile变量实现...原创 2018-04-23 18:24:12 · 257 阅读 · 0 评论 -
《Java并发编程实战》读书笔记——ThreadLocal、中断、UncaughtExceptionHandler、wait()、notify()和Condition
1、ThreadLocal,注意ThreadLocal在lang包里,而不是JUC。多用于保存数据库连接、管理Session、保存事务上下文等。public class ThreadLocal<T> { /** * 先获得线程ThreadLocal.ThreadLocalMap类型的成员变量threadLocals<ThreadLocal<K>,V> ...原创 2018-04-24 20:34:03 · 190 阅读 · 0 评论 -
《Java并发编程实战》读书笔记——线程池、Callable、Future、FutureTask
1、Executor和ExecutorService 基于生产者——消费者模式,提交任务的线程是生产者,执行的是消费者。public interface Executor { void execute(Runnable command);} 为了解决执行服务的生命周期问题,有了ExecutorService接口,添加了一些用于生命周期管理的方法。线程池有RUNNING、SHUTDO...原创 2018-04-24 22:44:40 · 250 阅读 · 0 评论 -
《Java并发编程实战》读书笔记——volatile(可见性、重排序和内存屏障)、Exchanger和CompletionService
1、volatile,保证了可见性,禁止指令重排序。 (1)可见性,深入分析volatile的实现原理 处理器先将内存数据读到L1、L2缓存,再进行操作,不定期写回内存。如果写volatile变量,JVM就会向处理器发送一条Lock前缀的指令,Lock指令会使处理器将缓存写入内存,并使其他处理器的缓存无效。但其他处理器缓存的值还是旧的,为了保证各个处理器的缓存一致,就会实现缓存一致性协...原创 2018-04-25 14:15:56 · 233 阅读 · 0 评论 -
JUC源码——ConcurrentHashMap(1.8)
1.8以前用分段锁实现static class Segment<K, V> extends ReentrantLock implements Serializable { final float loadFactor; Segment(float lf) { this.loadFactor = lf; }} 1.8及之后用了Unsafe类的CAS操作和并发扩...原创 2018-04-25 16:28:19 · 202 阅读 · 0 评论 -
JUC源码——CopyOnWriteArrayList、(Array/Linked)BlockingQueue、ConcurrentLinkedQueue(1.8)
1、CopyOnWriteArrayListpublic class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { // 用ReentrantLock实现线程安全 final transient ReentrantLock loc...原创 2018-04-25 18:35:31 · 233 阅读 · 0 评论