これはおそらく以前の投稿に似ていますが、ローカルではなくネットワークでのロックの使用について具体的に説明したいと思います。共有の場所にファイルを書きたいので、ネットワーク(確かにWindowsネットワーク、おそらくMac)でうまくいくかもしれません。このファイルが書き込まれている間、他の人がこのファイルの一部を読み取れないようにしたいと思います。これは高度な並行処理ではなく、ファイルは通常10MB未満です。
私はFileLock
ドキュメンテーションとFile
ドキュメンテーションを読みましたが、何が安全で何が安全でないかについて、いくぶん混乱しています。ファイルの一部ではなく、ファイル全体をロックしたい。
を使用できますかFileChannel.tryLock()
、それはネットワーク上で安全ですか、それともネットワークのタイプに依存しますか?標準のWindowsネットワークで動作しますか(そのようなものがある場合)。
これが機能しない場合は、0バイトのファイルまたはディレクトリをロックファイルとして作成し、メインファイルを書き出すのが最善の方法です。なぜそのFile.createNewFile()
ドキュメントはこれをファイルのロックに使用しないと言っているのですか?これは競合状態の影響を受けやすく、理想的ではありません。
これは、ネットワークファイルシステムでは確実に実行できません。アプリケーションがファイルにアクセスする唯一のアプリケーションである限り、何らかの協調ロックプロセス(おそらく、ファイルを開いたときにロックファイルをネットワークファイルシステムに書き込む)を実装するのが最善です。ただし、推奨されない理由は、プロセスがクラッシュしたり、ネットワークがダウンしたり、その他の問題が発生したりすると、アプリケーションが厄介でダーティな状態になるためです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加