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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • GitHub 新手详细教程「建议收藏」

    GitHub 新手详细教程「建议收藏」 这篇文章是我自己写的关于GitHub的内容,从我刚听到这个直到设置成功每一步都有详细的步骤来解释,其中有一些截图或者代码来自于网上。在开始前先跟大家说一下这篇博客是来介绍桌面版GitHub的使用的,如果只是简单的想使用GitHub新手可以使用网页版 https://blog.csdn.net/Hanani_Jia/article/details/79855429 这是我写的网页版的使用教…

    2022年5月8日
    45
  • 可变长子网掩码划分例题_最小生成树是什么

    可变长子网掩码划分例题_最小生成树是什么北极的某区域共有 n 座村庄,每座村庄的坐标用一对整数 (x,y) 表示。为了加强联系,决定在村庄之间建立通讯网络,使每两座村庄之间都可以直接或间接通讯。通讯工具可以是无线电收发机,也可以是卫星设备。无线电收发机有多种不同型号,不同型号的无线电收发机有一个不同的参数 d,两座村庄之间的距离如果不超过 d,就可以用该型号的无线电收发机直接通讯,d 值越大的型号价格越贵。现在要先选择某一种型号的无线电收发机,然后统一给所有村庄配备,数量不限,但型号都是 相同的。配备卫星设备的两座村庄无论相距多远都可以直

    2022年8月9日
    4
  • mybatiscodehelperpro2.9.6激活(JetBrains全家桶)

    (mybatiscodehelperpro2.9.6激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~00OE5RWT28-eyJsaWNlb…

    2022年3月30日
    438
  • PHPer面试指南-php 篇(一)「建议收藏」

    PHPer面试指南-php 篇(一)

    2022年2月11日
    51
  • 手机来电通核心模块——归属地数据库设计(Winsym原创)「建议收藏」

    手机来电通核心模块——归属地数据库设计(Winsym原创)「建议收藏」说到Symbian,确实让人头痛。不仅开发平台和SDK版本众多,难以选择,而且对程序员确实要求很高,光是SymbianC++的熟悉就要花上很长时间,更麻烦的是测试和调试。模拟器只能提供一部分功能,和电话通信有关的全部要在真机上测试。很多时候,在模拟器上能跑的代码,放到真机上就不行了,这其中的心酸想必开发过得朋友深有体会。小弟我因为工程实践项目的要求,和几位嵌入式的高手一起搞了Symbian来电通项目。其实来电通项目已经有很多人做了,比较有名的是CallMaster和柳丁,但是这方面的关键技术和源码至今没有

    2022年7月22日
    16
  • dede:list及dede:arclist 按权重排序的方法

    dede:list及dede:arclist 按权重排序的方法

    2021年9月22日
    38

发表回复

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

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