栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Java并发JUC(java.util.concurrent)ForkJoin/异步回调

Java并发JUC(java.util.concurrent)ForkJoin/异步回调

ForkJoin

什么是 ForkJoin

ForkJoin 在 JDK 1.7 , 并行执行任务!提高效率。大数据量!

ForkJoin处理流程:工作窃取

试验代码:

MyForkJoinTask:

package icu.lookyousmileface.forkjoin;

import java.util.concurrent.RecursiveTask;


class MyForkJoinTask extends RecursiveTask {
    //开始和结束位置数
    private Long start;
    private Long end;
    //临界值
    private Long temp = 10000L;

    public MyForkJoinTask(Long start, Long end) {
        this.start = start;
        this.end = end;
    }
    //计算方法
    @Override
    protected Long compute() {
        //小于临界值就进行计算不拆分
        if ((end-start)  

MainTask:

package icu.lookyousmileface.forkjoin;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.stream.LongStream;


public class MainTask {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        
        //创建forkjoin池
//        ForkJoinPool forkJoinPool = new ForkJoinPool();
//        //创建自己的ForkJoin计算程序
//        ForkJoinTask forkJoinTask = new MyForkJoinTask(0L, 10_0000_0000L);
//        //提交计算任务
//        ForkJoinTask submit = forkJoinPool.submit(forkJoinTask);
//        //获得计算的结果
//        Long aLong = submit.get();
//        System.out.println(aLong);

        
        long result = LongStream.rangeClosed(0L, 10_0000_0000L).parallel().reduce(0, Long::sum);
        System.out.println(result);

    }
}
异步回调

试验代码:

package icu.lookyousmileface.completables;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;


public class CompletableUse {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        //没有返回值的异步回调
//        CompletableFuture completableFuture = CompletableFuture.runAsync(()->{
//            try {
//                TimeUnit.SECONDS.sleep(3);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//            System.out.println(" 异步任务执行成功!");
//        });
//        System.out.println("main主线程");
//        //获取异步执行的结果
//        completableFuture.get();

        //又返回值的异步回调
        CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName()+":supplyAsync=>ok");
            int sum = 10/0;
            return 1024;
        });
        //编译
        //编译成功
        System.out.println(completableFuture.whenComplete((u1,u2)->{
            System.out.println("t=>"+u1);//正常的返回结果
            System.out.println("u=>"+u2);//错误信息
            //编译失败
        }).exceptionally((e)->{
            e.printStackTrace();
            return 2233; //错误的返回结果
        }).get());
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/730803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号