标签:producer-consumer multithreading blockingqueue 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。