Java协程

该博客对比了Java中多线程与使用Quasar库实现的协程在处理大量并发任务时的效果。通过创建1000000个线程和协程,展示了线程可能导致的资源消耗问题,而协程在I/O密集型任务上表现出更好的资源管理。博主使用阻塞队列收集并打印协程结果,证明协程能有效返回数据并完成执行。
摘要由CSDN通过智能技术生成

Java 多线程测试

for (int i = 0; i < 1000000; i++) {
            new Thread(() -> {
                try {
                    Thread.sleep(100000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }    

当线程达到一定数量的时候会出现

携程例子

添加依赖

        <dependency>
            <groupId>co.paralleluniverse</groupId>
            <artifactId>quasar-core</artifactId>
            <version>0.7.9</version>
            <classifier>jdk8</classifier>
        </dependency>

 

 

public static void main(String[] args) throws Exception {
        //使用阻塞队列来获取结果。
        LinkedBlockingQueue<Fiber<Integer>> fiberQueue = new LinkedBlockingQueue<>();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        for (int i = 0; i < 1000000; i++) {
            int finalI = i;
            //这里的Fiber有点像Callable,可以返回数据
            Fiber<Integer> fiber = new Fiber<>((SuspendableCallable<Integer>) () -> {
                //这里用于测试内存占用量
                Fiber.sleep(100000);
                System.out.println("in-" + finalI + "-" + LocalDateTime.now().format(formatter));
                return finalI;
            });
            //开始执行
            fiber.start();
            //加入队列
            fiberQueue.add(fiber);
        }
        while (true) {
            //阻塞
            Fiber<Integer> fiber = fiberQueue.take();
            System.out.println("out-" + fiber.get() + "-" + LocalDateTime.now().format(formatter));
        }
    }

 

阻塞之后可以返回数据,并且执行完1000000。

协程的方式更多用来做I/O密集型的操作。

计算密集型的还是使用线程更加合理。

输出结果

in-3-2021-02-05 14:31:36
in-6-2021-02-05 14:31:36
in-5-2021-02-05 14:31:36
in-2-2021-02-05 14:31:36
in-4-2021-02-05 14:31:36
in-1-2021-02-05 14:31:36
in-7-2021-02-05 14:31:36
in-8-2021-02-05 14:31:36
in-0-2021-02-05 14:31:36
in-9-2021-02-05 14:31:36
out-0-2021-02-05 14:31:36
out-1-2021-02-05 14:31:36
out-2-2021-02-05 14:31:36
out-3-2021-02-05 14:31:36
out-4-2021-02-05 14:31:36
out-5-2021-02-05 14:31:36
out-6-2021-02-05 14:31:36
out-7-2021-02-05 14:31:36
out-8-2021-02-05 14:31:36
out-9-2021-02-05 14:31:36

for 循环修改 为10

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值