为什么Volatile要禁止指令重排


计算机在执行程序时,为了提高性能,编译器和处理器常常会对指令重排,一般分为以下三种: 源代码 -> 编译器优化的重排 -> 指令并行的重排 -> 内存系统的重排 -> 最终执行指令 单线程环境里面确保最终执行结果和代码顺序的结果一致 处理器在进行重排序时,必须要考虑指令之间的数据依赖性 多线程环境中线程交替执行,由于编译器优化重排的存在,两个线程中使用的变量能否保证一致性是无法确定的,结果无法预测。

谈谈你对volatile的理解


说到JVM内存模型,我们就需要了解JMM内存模型。JMM内存模型是Java内存模型的子集, 它定义了Java内存模型的一些规则,并提供了一套原子性、可见性、有序性的规则。

集合类线程不安全及解决方案


在Java中,集合类是线程不安全的,如果多个线程同时对集合类进行操作,可能会导致并发修改异常。

Volatile不保证原子性


原子性保证的是什么 原子性是指不可分割的最小单位,比如一个操作是不可分割的,那么这个操作就是原子性的。 举个例子,比如说,你要给一个变量加1,那么这个操作就是原子性的,因为这个操作是不可分割的,那么你要是分割开来,那么这个操作就不是原子性的。

消息队列在项目中的使用


消息队列在项目中的使用

Elasticsearch 与 solr 的区别


Elasticsearch 与 solr 的区别

JVM垃圾回收机制


JVM垃圾回收机制

Redis持久化


**Redis 提供了 2 个不同形式的持久化方式** - **RDB** ( Redis DataBase) - **AOF** (Append OF File)

SpringMVC执行流程及工作原理


SpringMVC执行流程及工作原理

SpringMVC中如何解决POST请求中文乱码问题


SpringMVC中如何解决POST请求中文乱码问题