gpt4 book ai didi

java - 等待消费者完成任务,其他人才能开始

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:47 27 4
gpt4 key购买 nike

我有一个 Java 应用程序遍历树状文件夹结构并最终删除整个文件夹结构。为此,我使用一个 Blocking Queue 和一个生产者(遍历一棵树并将路径放入需要删除的文件)和一些实际执行删除作业的消费者。

文件夹必须为空才能被删除,因此,考虑具有以下结构:

/folder1/file1
/folder1/file2
/folder1/file3
/folder1/

这是 BlockingQueue 在任何给定点可能包含的内容。考虑到有 4 个消费者轮询队列:

Consumer1 将拾取并删除 /folder1/file1

Consumer2 将拾取并删除 /folder1/file2

Consumer3 将拾取并删除 /folder1/file3

Consumer4 将拾取并删除 /folder1


如果 Consumer3 没有完成删除 /folder1/file3,Consumer4 将无法删除 /folder1/,因为它将被标记为非空。

有没有办法让消费者线程等待其他消费者线程完成某些任务?

最佳答案

解决业务问题的方法有很多种。

方法 1:您的问题是当消费者 4 实际到达文件夹时,它需要等待删除所有文件。我认为如果 Consumer 4 可以访问 folder1,则它不必这样做。它可以直接转到文件夹(操作系统路径)并检查它是否为空。如果为空则删除它,如果没有则等待。

方法 2:您的生产者线程可以做更多的工作。如果它发现需要删除folder1中的所有文件。它不必先输入所有文件名,然后再输入文件夹名。它应该只放文件夹名称。只有一个消费者线程会获取文件夹名称并将其删除。

关于java - 等待消费者完成任务,其他人才能开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908964/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com