fas*_*cja 10 java multithreading java-19 virtual-threads
我正在使用 Java 19。我尝试使用新引入的虚拟线程,如下所示:
public static void main(String[] args) {
System.out.println("Started with virutal threads");
try (ExecutorService virtualService = Executors.newVirtualThreadPerTaskExecutor()) {
virtualService.submit(() -> System.out.println("[" + Thread.currentThread().getName() + "] virtual task 1"));
virtualService.submit(() -> System.out.println("[" + Thread.currentThread().getName() + "] virtual task 2"));
}
System.out.println("Finished");
}
Run Code Online (Sandbox Code Playgroud)
该程序的输出是:
Started with virutal threads
[] virtual task 2
[] virtual task 1
Finished
Run Code Online (Sandbox Code Playgroud)
为什么 Thread.currentThread().getName() 没有任何名称?
后续问题:如何识别彼此之间的虚拟线程?(如何识别它们)所以输出看起来像
[thread-1] virtual task 2
[thread-0] virtual task 1
Run Code Online (Sandbox Code Playgroud)
long threadId = Thread.currentThread().threadId() ; // The thread ID is unique and remains unchanged during its lifetime.
Run Code Online (Sandbox Code Playgroud)
任何线程的名称都是完全可选的。
如果您愿意,您可以命名一个线程。这在调试时非常方便。但您不应期望有任何预设值。
虚拟线程特别被指定为没有设置名称。引用Javadoc(我的重点):
虚拟线程默认没有线程名。如果未设置线程名称,则 getName 方法将返回空字符串。
某些框架(例如 JavaFX/OpenJFX)为其线程提供了一个信息丰富的名称。
如果您想识别 a Thread,请使用它的 ID a long。
Thread#threadId.Thread#getId引用Javadoc:
返回 this 的标识符
Thread。线程ID是long创建该线程时生成的正数。线程 ID 是唯一的,并且在其生命周期内保持不变。
| 归档时间: |
|
| 查看次数: |
1332 次 |
| 最近记录: |