为什么这段代码会导致
java.lang.IllegalThreadStateException
?
newSingleThreadScheduledExecutor(Thread::startVirtualThread).scheduleWithFixedDelay(
() -> System.out.println("Hello, World!"),
0,
1,
TimeUnit.SECONDS
);
java.util.concurrent.ThreadFactory
的 JavaDoc 明确指出:
按需创建新线程的对象。
...并且
Thread::startVirtualThread
是一个 Function<Runnable, Thread>
(对象),应该执行此操作。对吗?
我认为预期的方式可能是
Thread.ofVirtual().factory()
,但我仍然不知道为什么其他功能不起作用。
ThreadFactory
newThread
方法的 JavaDoc 说道:
构造一个新的未启动线程来运行给定的可运行对象。
关键是unstarted,这意味着
Thread.getState
返回Thread.State.NEW
。
Thread.startVirtualThread
创建一个新的虚拟线程并立即开始运行它。所以线程状态不会是NEW
.
ThreadPoolExecutor
中的代码检查工厂返回的线程的状态,如果不是NEW,则抛出IllegalThreadStateException
。