-
Java25 使用 VirtualThreadSchedulerMXBean 查看虚拟线程调度器 ForkJoinPool 信息
代码 import jdk.management.VirtualThreadSchedulerMXBean; import java.lang.management.ManagementFactor
-
Java25 中虚拟线程仍然会被 pin 住的 3 种情况
JEP 491 在JEP 491中解决了虚拟线程在synchronized锁内遇到阻塞时不能从载体线程上卸载的问题后,还列举了3种还没解决的场景。 但这些场景发生的概率很小,且都是编码可控。 解析类
-
Java 使用 jcmd 命令查看虚拟线程堆栈信息
Thread.dump_to_file jcmd中的Thread相关命令有Thread.print和Thread.dump_to_file(还有Thread.vthread相关命令)。 Thread
-
Java21 和 Java25 中获取虚拟线程挂载的平台线程
反射 需在虚拟线程中调用invoke方法,返回的是ForkJoinWorkerThread。 通过ForkJoinWorkerThread还是获取对应的ForkJoinPool。 Class<Thr
-
Java 获取虚拟线程挂载的平台线程对应的 ForkJoinPool 实例
反射获取 VirtualThread类中的私有静态final变量DEFAULT_SCHEDULER。 import java.lang.reflect.Field; import java.util
-
Java21 虚拟线程在 synchronized 代码块中被 pin 住问题复现
测试代码 public class VirtualThreadSynchronizedPinnedDemo { // 共享锁对象:所有虚拟线程会竞争这把锁 private stati
-
Java 虚拟线程调度器 ForkJoinPool 自定义参数设置
主要参数 parallelism maxPoolSize minRunnable 参数设置 方式一 程序启动时设置。 System.setProperty("jdk.virtualThreadS
-
Java 虚拟线程 ForkJoinPool 工作线程运行情况
程序初始运行时 当程序初始运行时,ForkJoinPool并不会创建工作线程。 PS \openjdk-25\bin> jcmd 14704 Thread.print 14704: 2025-10-
-
Java 为虚拟线程配置线程池(执行器)
作用 为虚拟线程配置线程池(应叫做:执行器)的作用:使用执行器去开启虚拟线程,并用执行器管理虚拟线程的生命周期。 本质 为虚拟线程创建的ExecutorService,本质是虚拟线程创建器和任务提交
-
Java 虚拟线程启动流程及调度器源码解析
启动虚拟线程方式 方式一 Thread.ofVirtual().start(() -> { }); 方式二 Runnable runnable = () -> {}; Thread.start
-
Java 虚拟线程是否为守护线程
结论 Java中的虚拟线程默认是守护线程,且不能被修改为非守护线程。 守护线程:当JVM退出时,JVM不会等守护线程执行完毕才退出,等所有非守护线程执行完毕后JVM就会退出。 源码 Thread的i
-
Spring Boot Callable 异步接口服务端超时后是否会继续执行业务逻辑
Controller 代码 使用了Callable作为返回值,Spring Boot会当作异步接口来处理。 @GetMapping("/timeout") pu
2023-07-18, Views: 1840 , Topics: Spring Boot juc
-
Java 并发编程之线程池大小
说明 关于线程池大小的设置,有很多文章和经验公式,给出的答案不尽相同。 Java并发编程实战 《Java并发编程实战》:第8章 - 线程池的使用。第141页。
-
Java 并发编程之 ThreadPoolExecutor 线程池源码解析
构造函数 注意:只有在阻塞队列满的前提下才会创建非核心线程。 ThreadPoolExecutor executor = new ThreadPoolExecu
-
Java 并发编程之自定义线程池
代码 核心线程 阻塞队列 拒绝策略 未实现线程maxSize功能 public class CustomThreadPool { public s
-
Java 并发编程之 ConcurrentLinkedQueue 非阻塞队列
介绍 ConcurrentLinkedQueue没有LinkedBlockingQueue类似的put和take等阻塞方法,所以是一个非阻塞的队列。 但和Lin
-
Java 并发编程之 LinkedBlockingQueue 阻塞队列
介绍 LinkedBlockingQueue的put和take为阻塞方法。 put:队列满时等待放入。 take:队列空时等待获取。 初始化 初始化链表。头节点
-
Java 并发编程之 ConcurrentSkipListSet
介绍 线程安全的排序集合。 原理 ConcurrentSkipListSet底层是使用ConcurrentSkipListMap实现。 public Concu
-
Java 并发编程之 ConcurrentSkipListMap
介绍 线程安全的排序集合。 跳跃列表 Head nodes Index nodes +-+ right +-+
-
Java 并发编程之 CopyOnWriteArraySet
介绍 线程安全的,适合并发的集合类,对比HashSet。 原理 底层实际就是CopyOnWriteArrayList。 具体可参考前一篇文章:Java 并发编程