9

我正在研究将Apache Commons VFS用于需要通过 ftp、sftp 和 https 在本地服务器和远程服务器之间传输文件的项目。

标准用法示例是从静态方法获取 FileSystemManager

FileSystemManager fsManager = VFS.getManager();

跨多个线程使用相同的 FileSystemManager 是否安全?

第二个问题是关于在 finally 块中正确释放资源:我在 Javadoc API 中找到了以下方法:

但我不清楚这些资源中的哪些通常应该关闭。

4

2 回答 2

1

The filemanager and filesystem objects are supposed to be thread safe, however I would not bet my live on it. Some internal locking (especially around renames) depend on the instance of the FileObject, so you should not use a FileCache which does not keep those (i.e. the default cache is fine).

FileContent and streams should not be used concurrently (in fact FileContent.close() for example only acts on streams of the current thread).

There are some resource leaks in this area (hopefully all fixed in 2.1-SNAPSHOT).

于 2015-01-05T23:46:15.767 回答
0

VFS.getManager 提供了一个单一的管理器,即。对文件系统的单一访问,所以我不建议在多线程环境中使用它。您可以创建自己的 DefaultFileSystemManager 并在完成后使用 close 方法。

于 2015-02-20T21:14:54.780 回答