Thread.startVirtualThread(new Task());
Thread virtualThread = Thread.ofVirtual().name("Virtual Thread").unstarted(new Task());
virtualThread.start();
Thread.ofVirtual().name("Virtual Thread").start(new Task());
ThreadFactory threadFactory = Thread.ofVirtual().name("Virtual Thread").factory();
threadFactory.newThread(new Task()).start();
单个虚拟虚拟等待后会立刻执行其他任务,普通线程则会等待,线程设置成1个就能看出来了。
-Djdk.virtualThreadScheduler.parallelism=1 -Djdk.virtualThreadScheduler.maxPoolSize=1
ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor();
for (int i = 0; i < 10000; i++) {
executorService.submit(new Task2());
}
完整的demo
public class Main {
public static void main(String[] args) throws IOException {
// 方式1
// Thread.startVirtualThread(new Task());
// 方式2
// Thread virtualThread = Thread.ofVirtual().name("Virtual Thread").unstarted(new Task());
// virtualThread.start();
// 方式3
// Thread.ofVirtual().name("Virtual Thread").start(new Task());
// 方式4
// ThreadFactory threadFactory = Thread.ofVirtual().name("Virtual Thread").factory();
// threadFactory.newThread(new Task()).start();
// 方式5 单个虚拟虚拟等待后会立刻执行其他任务,普通线程则会等待,线程设置成1个就能看出来了。
// -Djdk.virtualThreadScheduler.parallelism=1 -Djdk.virtualThreadScheduler.maxPoolSize=1
// ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor();
// for (int i = 0; i < 10000; i++) {
// executorService.submit(new Task2());
// }
// System.in.read();
}
static class Task implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread());
}
}
static class Task2 implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread());
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(Thread.currentThread()+" end");
}
}
}