多线程
1.说一下JUC包下的同步工具
2.synchronized修饰方法和代码块区别
3.volatile如何怎么保证有序性和可见性
1lock指令
对volatile修饰的变量,执行写操作的话,JVM会发送一条lock前缀指令给CPU,CPU在计算完之后会立即将这个值写回主内存,同时因为有MESI缓存一致性协议,所以各个CPU都会对总线进行嗅探,自己本地缓存中的数据是否被别人修改
如果发现别人修改了某个缓存的数据,那么CPU就会将自己本地缓存的数据过期,然后这个CPU上执行的线程在读取那个变量的时候,就会从主内存重新加载最新的数据。
lock前缀指令 + MESI缓存一致性协议
(2)内存屏障:禁止重排序
底层就是插入了XX内存屏障,XX内存屏障,就可以保证指令不会重排
对于volatile修改变量的读写操作,都会加入内存屏障
1.多个线程同时对volatile类型的变量进行i++操作,可以保证结果吗,为什么不能,说说volatile的原理,那我们在什么时候使用volatile是正确的,刚才的场景怎么保证结果(synchronized),说说sync的原理,它和ReentrantLock有什么不同
22怎么保证线程安全
23说说volatile
24 volatile为什么不保证原子性
25 volatile和final的共同点
8.synchronized关键字9.volatile关键字
26 synchronized可重入吗,怎么实现的
27 synchronized怎么实现线程安全的。
2.说