• 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
  • 相关阅读:
    java计算机毕业设计基于node.js的疫情大数据展示与政策查询系统
    图像像素值统计&图像几何形状的绘制&随机数与随机颜色
    Django的PATH路径转换器
    java校园快递代领系统 小程序
    python3安装opencv
    【WSL2教程】WSL迁移到非系统盘
    代码随想录算法训练营第27天|39. 组合总和 40.组合总和II 131.分割回文串
    电力布局三维编辑器功能设计
    笔记应用选择和知识管理
    C++ STL之容器(使用方法)
  • 原文地址:https://blog.csdn.net/mbh12333/article/details/133715148