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));
    }

}

结果

在这里插入图片描述

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

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