• Java21虚拟线程完整用法


    方式1
     Thread.startVirtualThread(new Task());
    
    • 1
    方式2
    Thread virtualThread = Thread.ofVirtual().name("Virtual Thread").unstarted(new Task());
    virtualThread.start();
    
    • 1
    • 2
    方式3
    Thread.ofVirtual().name("Virtual Thread").start(new Task());
    
    • 1
    方式4
    ThreadFactory threadFactory = Thread.ofVirtual().name("Virtual Thread").factory();
    threadFactory.newThread(new Task()).start();
    
    • 1
    • 2
    方式5

    单个虚拟虚拟等待后会立刻执行其他任务,普通线程则会等待,线程设置成1个就能看出来了。

    -Djdk.virtualThreadScheduler.parallelism=1 -Djdk.virtualThreadScheduler.maxPoolSize=1
    
    • 1
    ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor();
    for (int i = 0; i < 10000; i++) {
    	 executorService.submit(new Task2());
    }
    
    • 1
    • 2
    • 3
    • 4

    完整的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");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
  • 相关阅读:
    算法 - 正方形数量
    C++下基于模拟退火算法解决TSP问题
    2023年10月2日
    JVM第二讲:JVM 基础 - 字节码详解
    html+css布局,DIV区域的宽度和高度随页面宽度变化时等比变化
    Kaggle | Titanic - Machine Learning from Disaster | baseline
    请回答数据结构【布隆过滤器&位图】
    Kubernetes的容器批量调度引擎 Volcano
    Util应用框架快速入门(4) - 集成测试开发入门
    融合透镜成像反向学习的精英引导混沌萤火虫算法(Matlab)
  • 原文地址:https://blog.csdn.net/mbh12333/article/details/133715148