一、多线程应用场景
1.解析文件的时候:例如处理excel的时候启动多个线程处理不同的sheet
2.处理数据量比较大的时候:例如查询数据的时候按照不同数据段查询
3.远程调用数据的时候:比如企业微信联系人同步的时候
二、并发编程特征(多线程(手段)|并发(目的))
**1.原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。( **synchronized、Lock、atomic )
2.可见性:指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。(volatail)
3.有序性:即程序执行的顺序按照代码的先后顺序执行。( 在Java内存模型中,为了效率是允许编译器和处理器对指令进行重排序)(volatile)
三、锁的特征
1.互斥:即一次只允许一个线程持有某个特定的锁,一次就只有一个线程能够使用该共享数据。
2.可见:当一条线程修改了共享变量的值,新值对于其他线程来说是可以立即得知的。
四、CAS
atomic是利用CAS来实现原子性操作的(Compare And Swap),CAS实际上是利用处理器提供的CMPXCHG指令实现的,而处理器执行CMPXCHG指令是一个原子性操作。
五、volatile的原理和实现机制
加入volatile关键字的时候会多出一个lock的前缀指令,lock前缀指令实际上相当于一个内存屏障
1.确保指令重排序时不会把其后面的指令排到内存屏障之前的位置
2.强制将对缓存的修改操作立即写入主存,会导致其他CPU中对应的缓存行无效
六、 synchronized实现原理
\