Java虚拟线程与线程池的巧妙协作:深入探讨newVirtualThreadPerTaskExecutor()的特性
本文分析一个Java虚拟线程在Executors.newVirtualThreadPerTaskExecutor()创建的线程池中执行的特殊问题。代码示例中的methods5函数尝试重复提交同一个预创建的虚拟线程到线程池,但未打印预期日志;而methods6函数使用传统线程和Executors.newFixedThreadPool()则正常运行。这背后的原因是什么呢?
让我们来看问题代码:
private static void methods5() { ThreadFactory tf = Thread.ofVirtual().factory(); try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { Thread vt = tf.newThread(() -> log.info("vt task executed.")); for (int i = 0; i < 10; i++) { executor.submit(vt); } }}private static void methods6() { try (ExecutorService executor = Executors.newFixedThreadPool(10)) { for (int i = 0; i < 10; i++) { executor.submit(() -> log.info("thread task executed.")); } }}
登录后复制
本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。