Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 跟踪不同线程上载的文件_Java_Multithreading_Io_Executorservice - Fatal编程技术网

Java 跟踪不同线程上载的文件

Java 跟踪不同线程上载的文件,java,multithreading,io,executorservice,Java,Multithreading,Io,Executorservice,在java中,我试图编写一个文件管理器,它保存一个文件目录,并根据请求将它们上载到其他文件管理器。每次上传请求进来时(通过套接字),都会创建一个新线程来处理所请求文件的上传 我正在考虑使用ExecutorService和FileUploader实现Runnable来处理这个问题 i、 e.如果sessions是ExecutorService,mySocket是FileManager侦听请求的套接字,则每个线程的创建类似于: sessions.execute(new FileUploader(my

在java中,我试图编写一个文件管理器,它保存一个文件目录,并根据请求将它们上载到其他文件管理器。每次上传请求进来时(通过套接字),都会创建一个新线程来处理所请求文件的上传

我正在考虑使用
ExecutorService
FileUploader实现Runnable
来处理这个问题

i、 e.如果sessions是ExecutorService,mySocket是FileManager侦听请求的套接字,则每个线程的创建类似于:

sessions.execute(new FileUploader(mySocket.accept()));
问题是,如果FileManager获得重命名其数据库中某个文件的命令,它需要等待当前上载该文件的所有线程完成,然后才能重命名该文件


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

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

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

实际上,在Linux上,您可以在读取或写入文件时重命名文件,而另一个线程将继续正常工作(只要它只使用文件句柄,不做关闭和重新打开文件之类的花哨事)。实际上,在Linux上,你可以在读写文件时重命名文件,而另一个线程将继续正常工作(只要它只使用文件句柄,而不做关闭和重新打开文件之类的花哨事)。