【发布时间】:2011-05-08 11:20:45
【问题描述】:
在 java 中,我正在尝试编写一个 FileManager,它包含一个文件目录并根据请求将它们上传到其他 FileManager。每次上传请求(通过 Socket)进来时,都会创建一个新线程来处理所请求文件的上传。
我正在考虑使用ExecutorService 和FileUploader implements Runnable 来处理这个问题。
即如果 session 是 ExecutorService 并且 mySocket 是 FileManager 正在侦听请求的套接字,则每个线程的创建将类似于:
sessions.execute(new FileUploader(mySocket.accept()));
问题在于,如果 FileManager 收到重命名其数据库中的文件的命令,它需要等待当前正在上传文件的所有线程完成后才能重命名文件。
所以问题是,我如何跟踪有多少/哪些线程正在上传给定文件?
【问题讨论】:
-
实际上,在Linux上,你可以在读写文件的同时重命名文件,而另一个线程将继续正常工作(只要它只使用文件句柄,并且不做花哨的事情)比如尝试关闭并重新打开文件)。
标签: java multithreading io executorservice