JDK 源码解析
文章平均质量分 77
解读 JDK 经典源码, 学习高工们如何编程, 先模仿, 再创造, 从一菜鸟到高工...
wenniuwuren
Winter is coming
展开
-
Java 源码解析 ---- ExecutorCompletionService
一、具体例子先使用三种方法比较并发结果异同:方法一:提交后等待 future 结果返回方法二:自己维护一个Collection保存submit方法返回的Future,然后在主线程中遍历这个Collection并调用Future的get()方法取到线程的返回值。方法三:使用CompletionService类,它整合了Executor和BlockingQueue的功能。你可以将Call...原创 2019-05-10 20:34:50 · 457 阅读 · 0 评论 -
JDK 源码解析 —— ThreadLocal
零. 简介这个类提供本地线程变量。不同于一般的变量,这些变量在他们各自的线程里通过 get、set 访问一个它自己的变量,这是一个独立初始化的变量副本。在一个类中,ThreadLocal 实例一般是 private static 的,期望和一个线程关联状态(如 userId,transactionId 等)。简单地说,就是此类提供了线程的本地变量,线程修改本地变量不互相影响。举个例原创 2017-03-17 17:23:37 · 5426 阅读 · 2 评论 -
使用无限大小线程池 newCachedThreadPool 可能遇到的问题
看一段测试代码: package com.wenniuwuren.concurrent;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by zhuyb on 16/6/16. */public class newCachedThrea原创 2016-06-17 15:11:08 · 32837 阅读 · 1 评论 -
JDK 源码解析 —— CyclicBarrier
一. 简介CyclicBarrier 是一个让一系列线程集合互相等待直到一个公共屏障点(barrier point)的同步辅助工具。这个屏障被称为循环屏障,是因为它可以在等待线程释放后被重用。CyclicBarrier 支持一个可选的 Runnable 命令,在最后一个线程到达后执行一次 Runnable 命令。二. 简单使用示例 CyclicBarrier原创 2016-05-31 22:59:40 · 3202 阅读 · 0 评论 -
JDK 源码解析 —— Condition
一. 简介使用 Condition 可以让线程等待不同条件,典型的例子就是 ArrayBlockingQueue。二. 源码解析Condition 接口的具体实现是在 AbstractQueuedSynchronized 类中一个叫做 ConditionObject 的内部类。核心字段: /** condition 队列的第一个节点原创 2016-05-18 21:48:54 · 4276 阅读 · 0 评论 -
JDK 源码解析 —— Executors ExecutorService ThreadPoolExecutor 线程池
零. 简介Executors 是 Executor、ExecutorService、ThreadFactory、Callable 类的工厂和工具方法。一. 源码解析创建一个固定大小的线程池:通过重用共享无界队列里的线程来减少线程创建的开销。当所有的线程都在执行任务,新增的任务将会在队列中等待,直到一个线程空闲。由于在执行前失败导致的线程中断,如果原创 2016-05-16 22:28:02 · 5705 阅读 · 0 评论 -
JDK 源码解析 —— HashSet
HashSet 实现了 Set 接口,内部是由 HashMap 实例辅助实现的。它不保证元素的顺序,数据允许为 null...原创 2016-05-06 10:41:59 · 3245 阅读 · 0 评论 -
JDK 源码解析 —— Semaphore
这是一个用来对并发计数的信号量,并发量超过一定数值则只能等待。从概念上来说,semaphore 维持着一组许可证。获取锁的时候,需要先获得 semaphore 的许可才行...原创 2016-05-03 10:53:46 · 1904 阅读 · 0 评论 -
JDK 源码解析 —— ArrayBlockingQueue
ArrayBlockingQueue 是一个由数组作为基础数据结构的有界阻塞队列。出队入队使用先进先出算法,即 FIFO (first in first out)。head 是停留在队列中最长的节点,tail 停留在队列中最短的节点。从 head 出队列,从 tail 入队列...原创 2016-04-29 18:03:12 · 4388 阅读 · 0 评论 -
JDK 源码解析 —— Integer
零. 简介对于 Integer 这个 Java 程序员几乎天天使用的类, 使用上却可以看出普通程序员和优秀程序员区别。一. 深入代码在创建数字 1 的对象时, 大多数人会使用 new Integer(1), 而使用 Integer.valueOf(1) 可以使用系统缓存,既减少可能的内存占用,也省去了频繁创建对象的开销。 系统默认只缓原创 2015-10-27 21:12:21 · 5617 阅读 · 4 评论 -
JDK 源码解析 —— ConcurrentHashMap
代码一点小小的改动可能就是高并发下系统性能的巨大提升, 让我们来看看「世界级并发专家」 Doug Lea 怎么实现 ConcurrentHashMap 的...原创 2015-10-14 00:16:32 · 4319 阅读 · 4 评论 -
JDK 源码解析 —— AtomicInteger
并发编程的内部原理是什么? 它为什么能保证数据的一致性? 本文将为您揭晓 AtomicInteger 背后的奥秘...原创 2015-09-29 00:17:58 · 5256 阅读 · 2 评论 -
JDK 源码解析 —— Java 内存模型
本文作为 JDK 源码分析的基础开篇, Java 内存模型是并发编程的基础, 也是重中之重, 理解内存模型的基础上才能写出高效的并发代码...原创 2015-09-27 23:09:55 · 7794 阅读 · 4 评论