1

在 java 中,我正在尝试编写一个 FileManager,它包含一个文件目录并根据请求将它们上传到其他 FileManager。每次上传请求进入(通过 Socket)时,都会创建一个新线程来处理所请求文件的上传。

我正在考虑使用 anExecutorService和 aFileUploader implements Runnable来处理这个问题。

即,如果 session 是 ExecutorService 并且 mySocket 是 FileManager 正在侦听请求的套接字,则每个线程的创建将类似于:

sessions.execute(new FileUploader(mySocket.accept()));

问题在于,如果 FileManager 收到重命名其数据库中的文件的命令,它需要等待当前正在上传文件的所有线程完成,然后才能重命名文件。

所以问题是,我如何跟踪有多少/哪些线程正在上传给定文件?

4

1 回答 1

1

您可以使用与要传输的每个文件名关联的CountDownLatch 。您的平均线程应尝试在闩锁上等待()并仅在获得闩锁时才开始处理,并且您的孩子应在完成后使用 countDown()

于 2011-05-09T01:17:08.890 回答