什么是可重入锁(递归锁)


> 可重入锁就是递归锁 > > 指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取到该锁的代码,在同一线程在外层方法获取锁的时候,在进入内层方法会自动获取锁 > > 也就是说:线程可以进入任何一个它已经拥有的锁所同步的代码块 > > ReentrantLock / Synchronized 就是一个典型的可重入锁

Java锁之公平锁和非公平锁


### 公平锁 > 是指多个线程按照申请锁的顺序来获取锁,类似于排队买饭,先来后到,先来先服务,就是公平的,也就是队列 ### 非公平锁 > 非公平锁是指多个线程获取锁时,会随机获取锁。 > > 非公平锁的特点是:当线程获取锁时,不会先到达队列的前面,而是后面。

CAS底层原理


CAS(Compare And Swap)是一种无锁算法,它允许一个变量在多个线程中同时进行比较并交换。 CAS操作包含三个操作数: - 内存位置(V) - 预期原值(A) - 新值(B) 当且仅当预期原值A和内存位置V的值相同时,将内存位置V的值修改为新值B。否则,不会执行任何操作。

为什么Volatile要禁止指令重排


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

谈谈你对volatile的理解


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

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


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

Volatile不保证原子性


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

消息队列在项目中的使用


消息队列在项目中的使用

Elasticsearch 与 solr 的区别


Elasticsearch 与 solr 的区别

JVM垃圾回收机制


JVM垃圾回收机制