java并发编程基础 (7)

ThreadLocal和InheritableThreadLocal是基于在Thread里边的两个变量实现的,这两个变量类似于一个HashMap的结构ThreadLocalMap,里边的Entry key为ThreadLocal, value为你存的值. InheritableThreadLocal的实现主要是在线程创建的时候,如果父线程有inheritableThreadLocal, 会被拷贝到子线程。

原子类

一个简单的i++操作, 多线程环境下如果i是共享的,这个操作就不是原子的。

为此,java.util.concurrent.atomic这个包下边提供了一些原子类,这些原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。

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地址

大雄和你一起学编程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdsxd.html