编程语言
首页 > 编程语言> > 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