forkJoin_jordan lift off实战测评

forkJoin_jordan lift off实战测评需求解析2.8G的dicom文件,并且修改文件内容,将源文件删除后再创建新文件。实现publicclassAnonymousTaskextendsRecursiveAction{//要搜寻的目录privateFiledir;publicAnonymousTask(Filedir){this.dir=dir;…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

需求

解析2.8G的dicom文件,并且修改文件内容,将源文件删除后再创建新文件。

实现

public class AnonymousTask extends RecursiveAction {


    //要搜寻的目录
    private File dir;

    public AnonymousTask(File dir) {
        this.dir = dir;
    }

    @Override
    protected void compute() {
        File[] files = dir.listFiles();
        if (files != null) {
            List<AnonymousTask> list = new ArrayList<>();
            for (File file : files) {
                //如果是目录,就需要分割任务,交给ForkJoinPool去执行,因为任务数目不确定,所以需要定义一个集合
                if (file.isDirectory()) {
                    AnonymousTask findFiles = new AnonymousTask(file);
                    list.add(findFiles);

                    //不是目录,是文件就执行自己的逻辑
                } else {
                    if (!file.getAbsolutePath().endsWith("mim")) {
                        parseDicom(file);
                    }
                }
            }
            //如果任务
            if (list.size() > 0) {
                Collection<AnonymousTask> findFiles = invokeAll(list);
                for (AnonymousTask findFiles1 : findFiles) {
                    //等待所有的任务执行完成
                    findFiles1.join();
                }
            }
        }
    }


    private void parseDicom(File ctFile) {
        DicomInputStream cis = null;
        DicomOutputStream dos = null;
        try {
            cis = new DicomInputStream(ctFile);
            DicomObject dicomObject = cis.readDicomObject();
            dicomObject.putString(Tag.PatientName, VR.PN, "***");
            ctFile.delete();

            dos = new DicomOutputStream(new BufferedOutputStream(new FileOutputStream(ctFile)));
            dos.writeDicomFile(dicomObject);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (cis != null)
                    cis.close();
                if (dos != null)
                    dos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }


    private static void testFork() {
        ForkJoinPool forkJoinPool = new ForkJoinPool();
        AnonymousTask findFiles = new AnonymousTask(new File("C:\\Users\\CemB\\Desktop\\test2\\"));

        //execute方法是异步的
        forkJoinPool.execute(findFiles);

        //阻塞,等待ForkJoin执行完,主线程才往下执行
        findFiles.join();

    }


    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        testFork();
        long end = System.currentTimeMillis();
        System.out.println("耗时:" + (end - start));
    }

}

结果

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191509.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstorm2021永久激活码【2021最新】

    (phpstorm2021永久激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32P…

    2022年3月26日
  • vue脚手架基本使用「建议收藏」

    vue脚手架基本使用「建议收藏」vue脚手架基本使用

    2022年4月22日
  • 函数依赖关系的例子_部分函数依赖

    函数依赖关系的例子_部分函数依赖这里写自定义目录标题完全函数依赖、部分函数依赖和传递函数依赖举例1.完全依赖:2.部分函数依赖:传递函数依赖:完全函数依赖、部分函数依赖和传递函数依赖举例1.完全依赖:通过{学生学号,选修课程名}可以得到{该生本门选修课程的成绩},而通过单独的{学生学号}或者单独的{选修课程名}都无法得到该成绩,则说明{该生本门选修课程的成绩}完全依赖于{学生学号,选修课程名}2.部分函数依赖:通过{学生学号,课程号}可以得到{该生姓名},而通过单独的{学生学号}已经能够得到{该生姓名},则说明{该生姓

    2022年11月1日
  • java jce配置_java JCE 不限密钥长度解决办法

    java jce配置_java JCE 不限密钥长度解决办法()转自http://opensourceforgeeks.blogspot.com/2014/09/how-to-install-java-cryptography.html另外,在StackOverflow上也有相关讨论,并提供了反射实现代码https://stackoverflow.com/questions/25959948/local-policy-jar-and-us-export-p…

    2022年6月18日
  • 计算机的通信协议_计算机通信网络层级

    计算机的通信协议_计算机通信网络层级系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的

    2022年8月30日
  • html简单登录页面代码「建议收藏」

    html简单登录页面代码「建议收藏」图片必须是在Imges下的否则显示不出来(复制代码的话把图片换成你的图片就好了)代码如下&lt;html&gt;&lt;head&gt;&lt;title&gt;tes

    2022年6月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号