Java任务完成后结算_java-等待使用者完成任务,然后其他人才能开始

我有一个Java应用程序,它遍历树状文件夹结构并最终删除整个文件夹结构.为此,我在一个生产者(遍历一棵树并将路径放置到需要删除的文件)和许多实际执行删除作业的使用者中使用了阻塞队列.

文件夹必须为空才能删除,因此,请考虑采用以下结构:

/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:您的问题是,当Consumer 4实际上进入Folder时,它需要等待所有文件的删除.我认为,如果Consumer 4可以访问folder1,则不必这样做.它可以只是转到文件夹(操作系统路径)并检查其是否为空.如果为空,则删除它,然后等待.

方法2:生产者线程可以做更多的工作.如果发现所有的文件需要在文件夹1被删除.它不必先放置所有文件名,然后再放置文件夹名.它应该只放置文件夹名称.只有一个使用者线程将获得文件夹名称并将其删除.

标签:producer-consumer,multithreading,blockingqueue,java

来源: https://codeday.me/bug/20191111/2020871.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值