ThreadLocal和InheritableThreadLocal是基于在Thread里边的两个变量实现的,这两个变量类似于一个HashMap的结构ThreadLocalMap,里边的Entry key为ThreadLocal, value为你存的值. InheritableThreadLocal的实现主要是在线程创建的时候,如果父线程有inheritableThreadLocal, 会被拷贝到子线程。
原子类
一个简单的i++操作, 多线程环境下如果i是共享的,这个操作就不是原子的。
为此,java.util.concurrent.atomic这个包下边提供了一些原子类,这些原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。

一个使用的例子
public class Demo_04_01_1_Atomic {
static class Counter {
private AtomicInteger atomicInteger = new AtomicInteger(0);
public int increment() {
return atomicInteger.getAndIncrement();
}
public int get() {
return atomicInteger.get();
}
}
static class Counter2 {
private int value = 0;
public int increment() {
return value++;
}
public int get() {
return value;
}
}
public static void main(String[] args) throws InterruptedException {
// 这个用了原子类
Counter counter = new Counter();
// 这个没有用原子类
Counter2 counter2 = new Counter2();
for (int i = 0; i < 50; i++) {
new Thread(() -> {
for (int j = 0; j < 100; j++) {
counter.increment();
counter2.increment();
}
}).start();
}
Thread.sleep(2000);
System.out.println(counter.get()); // 一定是5000
System.out.println(counter2.get()); // 可能少于5000
}
}
超级简单~
原子类的实现没细看,貌似是CAS吧
章小结

本图源文件可以在github java-concurrent-programming-art-mini对应章下面找到
参考文献
啃碎并发(二):Java线程的生命周期
相关资源
gitbook笔记(看起来舒服,无法打开则请访问下边的地址)
gitbook笔记(没有上一个好看)
gitbook笔记github地址
