桃小白— 2021-09-09 16:42 采纳率: 0%
浏览 74
已结题

线程池中使用递归加速,运行结果不一致

1.我使用线程池对某一个文件下统计所有文件信息,却出现不用结果
在使用线程池的时候,只统计到了文件夹的信息,没有统计到文件的信息,
不使用线程池的时候,统计了全部信息。大家能帮忙看下吗

public static ExecutorService executorService = Executors.newFixedThreadPool(100);
    public static List<Callable<Integer>> tasks = new ArrayList<>();

    public static void main(String[] args) throws InterruptedException {
        Dome dome = new Dome();
        long start = System.currentTimeMillis();
        String addr = "D:\\";
        dome.file(addr);
        executorService.invokeAll(tasks);
        executorService.shutdown();
        final int[] i = {0};
        map.forEach((k, v) -> {
            i[0]++;
            System.out.println(i[0] + "       " + k + "     " + v);
        });
        long end = System.currentTimeMillis();
        System.out.println("耗时:" + TimeUnit.SECONDS.convert(end - start, TimeUnit.SECONDS));
    }
    public void file(String addr) throws InterruptedException {
        File file = new File(addr);
        if (file != null) {
            if (file.isDirectory()) {
                map.put(file.getPath() + "是文件夹:", "一共:" + "个文件");
                File[] files = file.listFiles();
                if (files != null && files.length > 0) {
                    for (File file1 : files) {
                        Callable<Integer> task = new Callable<Integer>() {
                            @Override
                            public Integer call() throws Exception {
                                file(file1.getPath());
                                return 1;
                            }
                        };
                        tasks.add(task);
                    }
                }
            } else {
                map.put(file.getPath() + "是文件:", "文件大小是:" + file.length());
            }
        }
    }
// 代码直接可以运行   可以对线程池进行注释。

  • 写回答

2条回答 默认 最新

  • 帆影匆匆 2021-09-09 17:35
    关注

    结果为啥不一样这个我看不出,但是哥们你运行的时候没有线程安全问题么,tasks一边遍历,一边加元素

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月19日
  • 修改了问题 9月10日
  • 修改了问题 9月9日
  • 创建了问题 9月9日

悬赏问题

  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴
  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥50 爬虫预算充足,跪巨佬
  • ¥15 滑块验证码拖动问题悬赏
  • ¥15 Wanted but not invoked:Actually, there were zero interactions with this moc
  • ¥20 怎么驱动tb6612