排序
面试题:如何在 Java 中控制多个线程的执行顺序?
在 Java 中控制多个线程的执行顺序是一个常见的需求,尤其是在实现特定业务逻辑或算法时。有多种方式可以实现对线程执行顺序的控制,以下是几种常用的方法: 1. 使用 join() 方法 Thread.join()...
面试题:Java 线程池内部任务出异常后,如何知道是哪个线程出了异常?
在 Java 中,当你使用线程池(如 ThreadPoolExecutor 或其更高级别的封装如 Executors.newFixedThreadPool() 等)执行任务时,如果任务内部抛出了未捕获的异常,默认情况下这个异常不会直接反馈...
面试题:什么是 Java 的 ForkJoinPool?
Java 的 ForkJoinPool 是 Java 7 引入的一个线程池实现,专门设计用于执行可以递归分解为更小任务的工作窃取算法(work-stealing algorithm)。它特别适用于那些能够被分解成许多相似的小任务的...
面试题:Java 中的 synchronized 轻量级锁是否会进行自旋?
在 Java 中,synchronized 的实现涉及到几种不同的锁状态,包括无锁状态、偏向锁、轻量级锁和重量级锁。这些状态之间的转换是根据运行时的并发情况动态调整的。 对于轻量级锁来说,它并不直接涉...
面试题:什么是 Java 的 StampedLock?
StampedLock 是 Java 8 引入的一种锁机制,位于 java.util.concurrent.locks 包中。 它提供了一种比传统的读写锁(如 ReentrantReadWriteLock)更灵活和高效的替代方案,特别适用于读操作远多于...
面试题:ThreadLocal 的缺点?
尽管 ThreadLocal 提供了线程本地存储的能力,使得每个线程可以拥有变量的一个独立初始化的副本,但它也存在一些缺点和潜在的问题: 1. 内存泄漏风险 类加载器相关的内存泄漏:如果 ThreadLocal...
面试题:说说 AQS 吧?
当然可以,AQS(AbstractQueuedSynchronizer) 是 Java 并发包 java.util.concurrent(简称 JUC)中非常核心的一个抽象类,是构建各种同步器(如 ReentrantLock、Semaphore、CountDownLatch、Re...
面试题:Java 中线程之间如何进行通信?
在 Java 中,线程间的通信可以通过多种机制实现,以确保多个线程能够协调工作而不发生数据不一致或竞争条件的问题。以下是几种常见的线程间通信的方法: 1. 使用 wait(), notify() 和 notifyAll...
面试题:你使用过 Java 的累加器吗?
在 Java 中,“累加器”(Accumulator)通常指的是用于多线程环境下高效执行累加操作的并发工具类。Java 提供了多种方式来实现累加器,其中最常用的是: ✅ 一、AtomicInteger / AtomicLong 这...
面试题:Java 中什么情况会导致死锁?如何避免?
在Java中,死锁是指两个或多个线程处于互相等待的状态,每个线程都在等待其他线程释放资源,从而导致所有涉及的线程都无法继续执行。这种情况通常发生在多线程环境下,当线程需要同时获取多个锁...
