Ryan's Blog

Java线程出现异常,进程为啥不会退出?

Java线程出现异常,进程为啥不会退出? 典型回答 Java线程出现异常,如果这里的异常是我们认知中的Exception的话,JVM进程其实是不会退出的。 因为Java本身就是支持多线程的,每个Java线程都是相对独立的执行单元,每个线程是独立的执行上下文,异常只会影响抛出异常的线程。所以当一个线程抛出异常时,只会影响到该线程本身。其他线程将继续执行,不受异常的影响。 而且,在Jav...

Jdk21中的虚拟线程是怎么回事?

JDK21 中的虚拟线程是怎么回事? 典型回答 虚拟线程这个名字很多人可能比较懵,但是如果对像Go、Ruby、python等语言有一些了解的话,就会很快的反应过来,其实这就是协程。 在以前的JDK中,Java的线程模型其实比较简单,在大多数操作系统中,主要采用的是基于轻量级进程实现的一对一的线程模型,简单来说就是每一个Java线程对应一个操作系统中的轻量级进程,这种线程模型中的线程创建...

Cas在操作系统层面是如何保证原子性的?

CAS在操作系统层面是如何保证原子性的? 典型回答 CAS是一种基本的原子操作,用于解决并发问题。在操作系统层面,CAS 操作的原理是基于硬件提供的原子操作指令。在x86架构的CPU中,CAS 操作通常使用 cmpxchg 指令实现。 为啥cmpxchg指令可以保证原子性呢?主要由以下几个方面的保障: cmpxchg 指令是一条原子指令。在 CPU 执行 cmpxch...

Cas一定有自旋吗?

CAS一定有自旋吗? 典型回答 不一定,但是通常为了提高CAS的成功率,会考虑做自旋。 最简单的自旋就是while(true) 通常情况下,CAS 操作都会采用自旋的方式,当 CAS 失败时,会重新尝试执行 CAS 操作,直到操作成功或达到最大重试次数为止。 因为,CAS 操作一般都是在多线程并发访问时使用,如果直接阻塞线程,会导致性能下降,而采用自旋的方式,可以让 CP...

Aqs的同步队列和条件队列原理?

AQS的同步队列和条件队列原理? 典型回答 如何理解AQS? 同步队列和条件队列是AQS中的两种不同队列,同步队列主要用于实现锁机制,而条件队列用于线程间的协调和通信。(本文代码为经典的JDK 1.8) 同步队列 同步队列主要用于实现锁的获取和释放。如我们常用的ReentrantLock,就是基于同步队列来实现的。 我们在介绍AQS的时候介绍过,它是一个FIFO队列,节点类型...