最近考了部分面试者关于变量访问的一些问题,总结一下
导图
文本
变量类型
1 static
1.1 随着类的加载而加载
1.2 附注:Java 类操作流程
2 volitale
2.1 从内存中读取(并不能保证原子性)
2.2 使用原则
2.2.1 写入变量不依赖此变量的值(或者只有一个线程修改此变量)
2.2.2 变量的状态不需要与其它变量共同参与不变约束
2.2.3 访问变量不需要加锁
3 Atomic
3.1 原子性变量
3.2 缺点
3.2.1 必须用特定API对变量进行操作
3.2.2 只有有限的几种类型
4 synchronized
4.1 缺点
4.1.1 性能考量
4.2 注意点
4.2.1 尽量减小锁的范围与程度
4.2.2 多锁时保证操作顺序以防死锁
5 concurrent工具包
5.1 CountDownLatch
5.2 ConcurrentHashMap
5.3 CopyOnWriteArrayList/CopyOnWriteArraySet
5.4 ReadWriteLock/ReentrantReadWriteLock
5.5 LinkedBlockingQueue
5.6 CyclicBarrier
5.7 …