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


相关推荐

  • 经典智能算法之粒子群算法详解

    经典智能算法之粒子群算法详解经典智能算法之粒子群算法要理解粒子群算法怎么可能没有算法背景,请看算法历史粒子群优化(ParticleSwarmOptimization,PSO)算法是Kennedy和Eberhart受人工生命研究结果的启发、通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局随机搜索算法。自然界中各种生物体均具有一定的群体行为,而人工生命的主要研究领域之一是探索自然界生物的群体行为…

    2022年6月6日
    123
  • 后缀数组的学习(四):SA数组实现代码分析

    后缀数组的学习(四):SA数组实现代码分析

    2021年8月20日
    51
  • 谷歌地图离线地图开发教程视频_谷歌地图离线

    谷歌地图离线地图开发教程视频_谷歌地图离线谷歌离线地图开发主要有两部分组成:1、获取离线地图数据;因为离线地图一般都是局域网,所以需要离线地图数据放在内网中使用;2、离线地图服务器搭建以及二次开发接口提供,离线地图是一种服务,就像我们Apache提供的WEB服务器一样,他是一种准们的地图服务:提供了包括WEB服务、TMS服务、WMTS服务等等。离线地图数据的获取:可以通过【大地图下载器】下载到。下面将一…

    2022年9月20日
    2
  • rap韵脚大全(包含各种诗词歌曲的韵脚等)

    rap韵脚大全(包含各种诗词歌曲的韵脚等)rap韵脚(a篇)Ba:八,疤,叭,芭,把,吧,爸,罢,巴,扒,坝,霸,靶,笆,捌,拔,跋,钯,耙Ca:擦,嚓Cha:查,插,叉,茶,差,杈,岔,衩,刹,诧,姹Da:大,答,达,打,搭,嗒,哒,耷,褡,瘩,鞑,靼Fa:发,法,罚,伐,乏,阀,筏,疺Ga:尬,伽,嘎,旮Ha:哈Ka:卡,咖,喀La:拉,啦,辣,蜡,腊,喇,垃Ma:吗,妈,马,嘛,麻,骂,码,玛Na:那,拿,…

    2022年6月18日
    141
  • Shell常用命令大全[通俗易懂]

    Shell常用命令大全[通俗易懂]嵌入式开发用的最多就是Shell命令,Shell命令是所有的Linux系统发行版所通用的,并不是说我在Ubuntu下学会了Shell命令,换另外一个Linux发行版操作系统以后就没用了,所以学习Shell命令非常有必要。1、目录信息查看命令文件浏览是最基本的操作了,Shell下文件浏览命令为ls,格式如下:ls[选项][路径]Is命令主要用于显示指定目录下的内容,列出指定目录下包含的所有的文件以及子目录,它的主要参数有:-a显示所有的文件以及子目录,包括以“”开头的隐藏文件。-l

    2022年10月18日
    3
  • eclipse乱码解决

    eclipse乱码解决关于eclipse乱码解决网上好多解决之道,今天遇到了但是试了试怎么都不好使,原因是方法可以,只是不太详细参考网址:https://blog.csdn.net/YouAreMy_Sunshine/article/details/797597921.修改项目编码格式:  鼠标移到项目名,右键-&gt;Properties-&gt;Resource-&gt;TextfileenCodi…

    2022年5月26日
    32

发表回复

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

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