关键字
CopyOnWriteArrayList 适用于写少读多的并发场景
ReadWriteLock适用于读多写少的并发场景,ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,读与读之间可以并发执行。在读多写少的情况下可以提高效率
ConcurrentHashMap是同步的HashMap,读写都加锁
只要在定义int类型的成员变量i的时候加上volatile关键字,也不能保证多线程并发执行i++这样的操作的时候就是线程安全的了
- volatile只保证多线程操作的可见性,不保证原子性
- 对于volatile修饰的变量,jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的
同步
- Critical Section 临界区(只能实现线程同步)
- Event 事件 进程同步
- Mutex互斥 进程同步
- Semaphore 信号量 进程同步
Threadloacal
- ThreadLocal的类声明:
public class ThreadLocal
可以看出ThreadLocal并没有继承自Thread,也没有实现Runnable接口。 - ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。
所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立 - 由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,不会被其他线程访问,变量被彻底封闭在每个访问的线程中
- ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本:
- ThreadLocal的类声明: