在java中,我试图编写一个包含文件目录的FileManager,并根据请求将它们上传到其他FileManagers。每次上传请求进入(通过套接字)时,都会创建一个新线程来处理所请求文件的上传。
我在考虑使用ExecutorService
和FileUploader implements Runnable
来解决这个问题。
即。如果session是ExecutorService而mySocket是FileManager正在侦听请求的套接字,则每个线程的创建将类似于:
sessions.execute(new FileUploader(mySocket.accept()));
问题是如果FileManager获得重命名其数据库中的文件的命令,则需要等待当前上传文件的所有线程在重命名文件之前完成。
所以问题是,如何跟踪上传给定文件的线程数?
答案 0 :(得分:1)
您可以使用与要传输的每个文件名关联的CountDownLatch。你的平均线程应该尝试在latch上使用await()并在它获取锁存器时开始处理,你的孩子在完成时应该使用countDown()