File tree Expand file tree Collapse file tree 4 files changed +67
-5
lines changed Expand file tree Collapse file tree 4 files changed +67
-5
lines changed Original file line number Diff line number Diff line change
1
+ <!-- TOC -->
2
+ - [ 前言] ( #前言 )
3
+ - [ 正文] ( #正文 )
4
+ - [ 1. 适用(使用)场景] ( #1-适用使用场景 )
5
+ - [ 1.1 线程资源持有(线程隔离)] ( #11-线程资源持有线程隔离 )
6
+ - [ 1.2 线程资源一致性] ( #12-线程资源一致性 )
7
+ - [ 1.3 线程安全] ( #13-线程安全 )
8
+ - [ 1.4 分布式计算] ( #14-分布式计算 )
9
+ - [ 1.5 在SqlSessionManager中的应用] ( #15-在sqlsessionmanager中的应用 )
10
+ - [ 1.6 在Spring框架中的TransactionContextHolder中的应用] ( #16-在spring框架中的transactioncontextholder中的应用 )
11
+ - [ 2. 源码学习] ( #2-源码学习 )
12
+ - [ 2.1 ThreadLocal内部使用了哪些数据结构?] ( #21-threadlocal内部使用了哪些数据结构 )
13
+ - [ 2.2 源码分析] ( #22-源码分析 )
14
+ - [ 3. 总结] ( #3-总结 )
15
+ - [ 3.1 ThreadLocal的适用场景] ( #31-threadlocal的适用场景 )
16
+ - [ 3.2 哪些开源框架、源码使用到了ThreadLocal] ( #32-哪些开源框架源码使用到了threadlocal )
17
+ - [ 3.3 关于内存泄漏] ( #33-关于内存泄漏 )
18
+ - [ 3.4 其他] ( #34-其他 )
19
+ - [ 引用] ( #引用 ) <!-- /TOC -->
20
+
1
21
## 前言
2
22
最近开始空闲起来了,深入学习系列以及自我提升系列都得提上日程了。本次学习的ThreadLocal,是由JDK提供的一个用于存储每个线程本地副本信息的类,它的编写者就是著名的并发包大神Doug Lea。要想深入学习一个类,首先得先阅读它的官方类注释:
3
23
Original file line number Diff line number Diff line change
1
+ <!-- TOC -->
2
+ - [ 前言] ( #前言 )
3
+ - [ 正文] ( #正文 )
4
+ - [ 1 基础] ( #1-基础 )
5
+ - [ 1.1 String的修饰符与实现类] ( #11-string的修饰符与实现类 )
6
+ - [ 1.2 String类的成员变量] ( #12-string类的成员变量 )
7
+ - [ 1.2.1 String是通过char数组来保存字符串的] ( #121-string是通过char数组来保存字符串的 )
8
+ - [ 1.2.2 String类的属性hash] ( #122-string类的属性hash )
9
+ - [ 1.2.3 serialVersionUID属性作为String类的序列化ID] ( #123-serialversionuid属性作为string类的序列化id )
10
+ - [ 1.2.4 serialPersistentFields属性] ( #124-serialpersistentfields属性 )
11
+ - [ 1.3 创建String对象] ( #13-创建string对象 )
12
+ - [ 1.4 String被设计为不可变性的原因] ( #14-string被设计为不可变性的原因 )
13
+ - [ 2 深入String] ( #2-深入string )
14
+ - [ 2.1 先了解一下JAVA内存区域] ( #21-先了解一下java内存区域 )
15
+ - [ 2.2 String与JAVA内存区域] ( #22-string与java内存区域 )
16
+ - [ 2.3 String的intern方法] ( #23-string的intern方法 )
17
+ - [ 2.3.1 重新理解使用new和字面量创建字符串的两种方式] ( #231-重新理解使用new和字面量创建字符串的两种方式 )
18
+ - [ 2.3.2 解析] ( #232-解析 )
19
+ <!-- /TOC -->
20
+
1
21
## 前言
2
22
3
23
不想成为一个只会使用API的攻城狮,也不甘于现状想深入学习JDK。
Original file line number Diff line number Diff line change
1
+ <!-- TOC -->
2
+ - [ 前言] ( #前言 )
3
+ [ 正文] ( #正文 )
4
+ - [ 1. String的equals方法] ( #1-string的equals方法 )
5
+ - [ 2. String的hashcode方法] ( #2-string的hashcode方法 )
6
+ - [ 3. String的hashcode()和equals()] ( #3-string的hashcode和equals )
7
+ - [ 4. String的compareTo()方法] ( #4-string的compareto方法 )
8
+ - [ 5. String的startWith(String prefix)方法] ( #5-string的startwithstring-prefix方法 )
9
+ - [ 6. String的endsWith(String suffix)方法] ( #6-string的endswithstring-suffix方法 )
10
+ - [ 7. String的indexOf(int ch)方法] ( #7-string的indexofint-ch方法 )
11
+ - [ 8. String的split(String regex, int limit)方法] ( #8-string的splitstring-regex-int-limit方法 )
12
+ - [ 8.1 源码分析1] ( #81-源码分析1 )
13
+ - [ 8.2 源码分析2] ( #82-源码分析2 )
14
+ - [ 总结] ( #总结 )
15
+ <!-- /TOC -->
16
+
1
17
## 前言
2
18
3
19
不想成为一个只会使用API的攻城狮,也不甘于现状想深入学习JDK源码。
Original file line number Diff line number Diff line change
1
+ <!-- TOC -->
2
+ - [ 1 前言] ( #1-前言 )
3
+ - [ 2 正文] ( #2-正文 )
4
+ - [ 2.1 JDK官方文档解释] ( #21-jdk官方文档解释 )
5
+ - [ 2.2 使用下CompletableFuture的API] ( #22-使用下completablefuture的api )
6
+ - [ 2.3 源码分析] ( #23-源码分析 )
7
+ - [ Completion] ( #completion )
8
+ - [ CompletionStage] ( #completionstage )
9
+ - [ 总结] ( #总结 )
10
+ <!-- /TOC -->
11
+
1
12
## 1 前言
2
13
最近在看公司源码,发现有些服务大量使用到了CompletableFuture,学了这么久Java,对这个类还是挺陌生的,实在惭愧。于是利用了业余时间认真学习并总结了下CompletableFuture的特性以及用法。
3
14
@@ -555,11 +566,6 @@ main线程会在asyncSupplyStage()方法中返回d,就是我们的“依赖任
555
566
3 . CompletableFuture中有“源任务”和“依赖任务”,“源任务”的完成能够触发“依赖任务”的执行,这里的完成可以是返回正常结果或者是异常。
556
567
4 . CompletableFuture默认使用ForkJoinPool,也可以使用指定线程池来执行任务。
557
568
558
- 文中的测试用例都在下列源码的JdkLearn模块的test目录下。
559
-
560
- > 源码地址:https://github.com/coderbruis/JavaSourceLearning
561
-
562
-
563
569
564
570
参考文档:
565
571
- 《JDK8官方文档》
You can’t perform that action at this time.
0 commit comments