【问题标题】:Keeping track of files being uploaded by different threads跟踪不同线程上传的文件
【发布时间】:2011-05-08 11:20:45
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 实际上,在Linux上,你可以在读写文件的同时重命名文件,而另一个线程将继续正常工作(只要它只使用文件句柄,并且不做花哨的事情)比如尝试关闭并重新打开文件)。

标签: java multithreading io executorservice


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2011-08-14
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2014-02-13
    相关资源
    最近更新 更多