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