什么是CAS和ABA问题?如何解决?

2023-06-07
阅读 4 分钟
858
CAS(Compare and Swap)是一种轻量级的同步操作,也是乐观锁的一种实现,它用于实现多线程环境下的并发算法。CAS 操作包含三个操作数:内存位置(或者说是一个变量的引用)、预期的值和新值。如果内存位置的值和预期值相等,那么处理器会自动将该位置的值更新为新值,否则不进行任何操作。
封面图

什么是死锁?它是如何产生的?

2023-06-06
阅读 3 分钟
582
死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),互相持有对方所需的资源,导致它们都无法向前推进,从而导致永久阻塞的问题就是死锁。
封面图

synchronized和Lock有什么区别?

2023-06-05
阅读 3 分钟
1k
synchronized 可用来修饰普通方法、静态方法和代码块,当一个线程访问一个被 synchronized 修饰的方法或者代码块时,会自动获取该对象的锁,其他线程将会被阻塞,直到该线程执行完毕并释放锁。这样就保证了多个线程对共享资源的操作的互斥性,从而避免了数据的不一致性和线程安全问题。

为什么双重效验锁要加volatile?

2023-06-01
阅读 4 分钟
651
单例模式的实现方法有很多种,如饿汉模式、懒汉模式、静态内部类和枚举等,当面试官问到“为什么双重效验锁要加volatile?”时,那么他指的是为什么懒汉模式中的私有变量要加 volatile?
封面图

volatile 底层是如何实现的?

2023-05-31
阅读 2 分钟
837
在 Java 中,volatile 是一种关键字,用于修饰变量。使用 volatile 关键字修饰的变量具有可见性和有序性,但不保证原子性。

为什么要用线程池?

2023-05-30
阅读 5 分钟
606
线程池是一种管理和复用线程资源的机制,它由一个线程池管理器和一组工作线程组成。线程池管理器负责创建和销毁线程池,以及管理线程池中的工作线程。工作线程则负责执行具体的任务。
封面图

线程池是如何执行的?任务太多会怎样?

2023-05-29
阅读 6 分钟
664
从上述源码我们可以看出,当任务来了之后,线程池的执行流程是:先判断当前线程数是否大于核心线程数?如果结果为 false,则新建线程并执行任务;如果结果为 true,则判断任务队列是否已满?如果结果为 false,则把任务添加到任务队列中等待线程执行,否则则判断当前线程数量是否超过最大线程数?如果结果为 false,则新...
封面图

ConcurrentHashMap是如何实现的?

2023-05-25
阅读 4 分钟
702
众所周知 ConcurrentHashMap 是 HashMap 的多线程版本,HashMap 在并发操作时会有各种问题,比如死循环问题、数据覆盖等问题。而这些问题,只要使用 ConcurrentHashMap 就可以完美解决了,那问题来了,ConcurrentHashMap 是如何保证线程安全的?它的底层又是如何实现的?
封面图

被问懵了:什么是负载因子?为什么是0.75?

2023-05-24
阅读 2 分钟
802
前几天面试被问懵了,还是关于 HashMap 的面试题,什么是负载因子?为什么是0.75?第一个问题还好回答,然而第二个问题就有点含糊其辞说不清楚了,所以今天就来好好复盘一下这道题。
封面图

为什么 HashMap 会死循环?

2023-05-23
阅读 2 分钟
1k
HashMap 死循环发生在 JDK 1.8 之前的版本中,它是指在并发环境下,因为多个线程同时进行 put 操作,导致链表形成环形数据结构,一旦形成环形数据结构,在 get(key) 的时候就会产生死循环。如下图所示:
封面图

面试复盘:哈希冲突的常见解决方案?

2023-05-22
阅读 2 分钟
520
程序的运行结果如下:不同的字符串,却拥有了相同的 hashCode 这就是哈希冲突。因为元素的位置是根据 hashCode 的值进行定位的,此时它们的 hashCode 相同,但一个位置只能存储一个值,这就是哈希冲突。
封面图

HashMap 底层是如何实现的?

2023-05-19
阅读 1 分钟
390
HashMap 在不同的 JDK 版本下的实现是不同的,在 JDK 1.7 时,HashMap 底层是通过数组 + 链表实现的;而在 JDK 1.8 时,HashMap 底层是通过数组 + 链表或红黑树实现的。
封面图

什么是反射?它有什么用?

2023-05-18
阅读 3 分钟
470
在 Java 中,反射是指在运行时检查和操作类、接口、字段、方法等程序结构的能力。通过反射,可以在运行时获取类的信息,创建类的实例,调用类的方法,访问和修改类的字段等。
封面图