2017年7月5日

JDK 源码解析 —— CyclicBarrier

摘要: 一. 简介 CyclicBarrier 是一个让一系列线程集合互相等待直到一个公共屏障点(barrier point)的同步辅助工具。这个屏障被称为循环屏障,是因为它可以在等待线程释放后被重用。 CyclicBarrier 支持一个可选的 Runnable 命令,在最后一个线程到达后执行一次 Run 阅读全文

posted @ 2017-07-05 18:02 alex5211314 阅读(118) 评论(0) 推荐(0) 编辑

JDK 源码解析 —— Condition

摘要: 一. 简介 使用 Condition 可以让线程等待不同条件,典型的例子就是 ArrayBlockingQueue。 二. 源码解析 Condition 接口的具体实现是在 AbstractQueuedSynchronized 类中一个叫做 ConditionObject 的内部类。 核心字段: / 阅读全文

posted @ 2017-07-05 18:01 alex5211314 阅读(166) 评论(0) 推荐(0) 编辑

JDK 源码解析 —— Executors ExecutorService ThreadPoolExecutor 线程池

摘要: 零. 简介 Executors 是 Executor、ExecutorService、ThreadFactory、Callable 类的工厂和工具方法。 一. 源码解析 [java] view plain copy print? public static ExecutorService newFi 阅读全文

posted @ 2017-07-05 18:00 alex5211314 阅读(165) 评论(0) 推荐(0) 编辑

JDK 源码解析 —— HashSet

摘要: 零. 简介 这个类实现了 Set 接口,内部是由 HashMap 实例辅助实现的。它不保证元素的顺序,数据允许为 null。 假如 hash 方法将数据分散地比较合理,比如一个 bucket 一个数据,那么 add、remove、contains、size 性能开销是常数时间。 这个类非线程安全的, 阅读全文

posted @ 2017-07-05 17:18 alex5211314 阅读(127) 评论(0) 推荐(0) 编辑

JDK 源码解析 —— Semaphore

摘要: 零. 简介 这是一个用来对并发计数的信号量,并发量超过一定数值则只能等待。从概念上来说,semaphore 维持着一组许可证。获取锁的时候,需要先获得 semaphore 的许可才行。 一. 从 Demo 解析源码 [java] view plain copy print? package com. 阅读全文

posted @ 2017-07-05 17:13 alex5211314 阅读(144) 评论(0) 推荐(0) 编辑

JDK 源码解析 —— ArrayBlockingQueue

摘要: 零. 简介 ArrayBlockingQueue 是一个由数组作为基础数据结构的有界阻塞队列。出队入队使用先进先出算法,即 FIFO (first in first out)。head 是停留在队列中最长的节点,tail 停留在队列中最短的节点。从 head 出队列,从 tail 入队列。 这是一个 阅读全文

posted @ 2017-07-05 17:10 alex5211314 阅读(145) 评论(0) 推荐(0) 编辑

JDK 源码解析 —— Integer

摘要: 零. 简介 对于 Integer 这个 Java 程序员几乎天天使用的类, 使用上却可以看出普通程序员和优秀程序员区别。 一. 深入代码 在创建数字 1 的对象时, 大多数人会使用 new Integer(1), 而使用 Integer.valueOf(1) 可以使用系统缓存,既减少可能的内存占用, 阅读全文

posted @ 2017-07-05 17:06 alex5211314 阅读(138) 评论(0) 推荐(0) 编辑

JDK 源码解析 —— ConcurrentHashMap

摘要: 零. 概述 ConcurrentHashMap 是将锁的范围细化来实现高效并发的。 基本策略是将数据结构分为一个一个 Segment(每一个都是一个并发可读的 hash table, 即分段锁)作为一个并发单元。 为了减少开销, 除了一处 Segment 是在构造器初始化的, 其他都延迟初始化(详见 阅读全文

posted @ 2017-07-05 17:04 alex5211314 阅读(92) 评论(0) 推荐(0) 编辑

JDK 源码解析 —— AtomicInteger

摘要: 零. 前言 JDK 里面提供的以 Atomic* 开头的类基本原理都是一致的, 都是借助了底层硬件级别的 Lock 来实现原子操作的。 本文以 AtomicInteger 为例进行讲述, 其他的类似。阅读本文前建议先阅读基础篇:Java 内存模型 一. 处理器原子操作: 3种加锁方式 关于 CPU 阅读全文

posted @ 2017-07-05 16:45 alex5211314 阅读(129) 评论(0) 推荐(0) 编辑

JDK 源码解析 —— Java 内存模型

摘要: 零. 为什么需要 Java 内存模型 为了让程序员忽略掉各种硬件和操作系统的内存访问差异, 也既无需关心不同架构上内存模型的差异, Java 在代码和硬件内存模型间又提供了一个 Java 内存模型。 一. 并发模型的分类 在并发编程中,需要处理两个关键问题:线程之间如何通信(线程之间以何种机制来交换 阅读全文

posted @ 2017-07-05 16:43 alex5211314 阅读(101) 评论(0) 推荐(0) 编辑

使用无限大小线程池 newCachedThreadPool 可能遇到的问题

摘要: 看一段测试代码: [java] view plain copy print? package com.wenniuwuren.concurrent; import java.util.concurrent.ExecutorService; import java.util.concurrent.Ex 阅读全文

posted @ 2017-07-05 16:36 alex5211314 阅读(1307) 评论(0) 推荐(0) 编辑

JDK 源码解析 —— ThreadLocal

摘要: 零. 简介 这个类提供本地线程变量。不同于一般的变量,这些变量在他们各自的线程里通过 get、set 访问一个它自己的变量,这是一个独立初始化的变量副本。在一个类中,ThreadLocal 实例一般是 private static 的,期望和一个线程关联状态(如 userId,transaction 阅读全文

posted @ 2017-07-05 10:55 alex5211314 阅读(172) 评论(0) 推荐(0) 编辑

导航