9

ftp、sftp、およびhttpsを介してローカルサーバーとリモートサーバー間でファイルを転送する必要があるプロジェクトにApache Commons VFSを使用することを検討しています。

標準的な使用例は、静的メソッドから FileSystemManager を取得しています。

FileSystemManager fsManager = VFS.getManager();

複数のスレッドで同じ FileSystemManager を使用しても安全ですか?

2 つ目の質問は、finally ブロックでリソースを適切に解放することについてです。Javadoc API に次のメソッドがあります。

しかし、これらのリソースのどれを通常クローズする必要があるかは明確ではありません。

4

2 に答える 2

1

filemanager と filesystem オブジェクトはスレッド セーフであると想定されていますが、私はそれに賭けるつもりはありません。一部の内部ロック (特に名前の変更に関するもの) は FileObject のインスタンスに依存するため、それらを保持しない FileCache を使用しないでください (つまり、デフォルトのキャッシュで問題ありません)。

FileContent とストリームを同時に使用しないでください (実際、たとえば FileContent.close() は現在のスレッドのストリームに対してのみ機能します)。

この領域にはいくつかのリソース リークがあります (うまくいけば、2.1-SNAPSHOT ですべて修正されます)。

于 2015-01-05T23:46:15.767 に答える
0

VFS.getManager は単一のマネージャーを提供します。ファイルシステムへの単一アクセスなので、マルチスレッド環境からの使用はお勧めしません。独自の DefaultFileSystemManager を作成し、完了したら close メソッドを使用できます。

于 2015-02-20T21:14:54.780 に答える