Java虚拟线程与线程池:为什么重复提交同一个虚拟线程到`newVirtualThreadPerTaskExecutor()`会失效?

java虚拟线程与线程池:为什么重复提交同一个虚拟线程到`newvirtualthreadpertaskexecutor()`会失效?

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生成,不代表软件指南立场。本站不负任何法律责任。

如若转载请注明出处:http://www.down96.com/tutorials/12845.html

热心网友热心网友
上一篇 2025-04-11 17:07
下一篇 2025-04-11 17:07

相关推荐

本站[软件指南]所有内容来自互联网投稿或AI智能生成,并不代表软件指南的立场。