在java中,我正在尝试编写一个FileManager,它保存文件目录并根据请求将它们上传到其他FileManager。每次传入上传请求(通过套接字)时,都会创建一个新线程来处理所请求文件的上传。
我正在考虑使用 ExecutorService
和 FileUploader 实现 Runnable
来处理这个问题。
即如果 session 是 ExecutorService 并且 mySocket 是 FileManager 正在监听请求的套接字,则每个线程的创建将类似于:
sessions.execute(new FileUploader(mySocket.accept()));
问题是,如果 FileManager 收到重命名数据库中文件的命令,它需要等待当前正在上传文件的所有线程完成后才能重命名文件。
所以问题是,我如何跟踪有多少/哪些线程正在上传给定文件?
最佳答案
您可以使用 CountDownLatch与您要传输的每个文件名关联。您的平均线程应该尝试在闩锁上等待()并仅在获得闩锁时才开始处理,并且您的 child 应该在完成后使用 countDown()
关于java - 跟踪不同线程上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5927115/