排序
面试题:Java 中 ReentrantLock 的实现原理是什么?
ReentrantLock 是 Java 并发包 java.util.concurrent.locks 中的一部分,提供了一种比同步方法和同步块更灵活的锁定机制。 它支持与隐式监视器锁(通过 synchronized 关键字实现)相同的互斥锁...
面试题:Java 中什么情况会导致死锁?如何避免?
在Java中,死锁是指两个或多个线程处于互相等待的状态,每个线程都在等待其他线程释放资源,从而导致所有涉及的线程都无法继续执行。这种情况通常发生在多线程环境下,当线程需要同时获取多个锁...
面试题: Java 线程池核心线程数在运行过程中能修改吗?如何修改?
在 Java 的 ThreadPoolExecutor 中,核心线程数(core pool size)默认情况下是在创建线程池实例时设定的,并且在运行期间通常是固定的。 然而,在某些情况下你可能需要动态调整核心线程数以适...
面试题:Java 中的 InheritableThreadLocal 是什么?
InheritableThreadLocal 是 Java 中 ThreadLocal 类的一个子类,它提供了一种机制来在线程创建时将 ThreadLocal 变量的值从父线程传递给子线程。 这意味着当一个新的子线程被创建时,它可以继承...
面试题:什么是 Java 的 happens-before 规则?
在Java中,happens-before 规则是Java内存模型(JMM, Java Memory Model)的一部分,用于定义程序中操作之间的部分有序关系,确保多线程环境下的可见性和顺序性。 通过这些规则,程序员可以确定...
面试题:Java 并发库中提供了哪些线程池实现?它们有什么区别?
Java 并发库(java.util.concurrent 包)提供了多种线程池实现,这些实现通过 Executors 工厂类提供便捷的创建方法。以下是几种常见的线程池类型及其特点和适用场景: 1. FixedThreadPool 创建...
面试题:什么是 Java 中的指令重排?
在Java中,指令重排(Instruction Reordering)是指编译器或处理器为了优化程序性能而对程序中的指令顺序进行调整的过程。 尽管这种重排通常不会改变单线程程序的行为,但在多线程环境下可能导...
面试题:Java 中 Thread.sleep(0) 的作用是什么?
在Java中,Thread.sleep(0) 的使用实际上是为了让当前线程放弃剩余的时间片,并允许具有相同优先级的其他线程有机会运行。这被称为“线程礼让”,尽管它并不能保证这些其他线程会立即执行,因为...
面试题:Synchronized 修饰静态方法和修饰普通方法有什么区别?
在 Java 中,synchronized 关键字可以用来修饰实例方法、静态方法或者代码块。当它用于修饰静态方法和普通(实例)方法时,存在一些重要的区别,主要体现在锁的对象以及锁定的范围上。 锁定对象...
面试题:为什么 Netty 不使用 ThreadLocal 而是自定义了一个 FastThreadLocal ?
Netty 使用 FastThreadLocal 而不是标准的 Java ThreadLocal,主要是为了提高性能和优化内存使用。 虽然 ThreadLocal 提供了线程本地存储的能力,允许每个线程拥有其变量的一个独立初始化的副本...
