ファイルとフォルダのツリーを作成しています。マルチスレッドに書き直しています。私が見る唯一の弱点は、フォルダーを作成するときです。現在、それは1つずつ(詳細に)進んでいます。ファイルを書き留める前に、パスが存在するかどうかを確認します。そうでない場合は、mkdirs を使用して不足しているすべてのものを作成します。
public void checkDir(String relativePath) {
File file = new File(homePath + relativePath);
if (!file.exists()) {
if (file.mkdirs()) {
log.info("Directory: " + homePath + relativePath + " is created!");
} else {
log.error("Failed to create directory: " + homePath + relativePath + " !");
}
}
}
2 つのスレッドを使用するとどうなるかという質問があります。1 つにはパス A/B/C があり、もう 1 つにはパス A/B/D があります。A フォルダーのみが存在し、B フォルダーは存在しないとします。したがって、両方ともパスが存在しないことを確認し、作成したいとします。そのため、そのうちの 1 つが失敗する可能性があります。もう 1 つが高速になるからです。では、どうすればこれを管理できますか?
- 存在条件を削除して失敗したままにすることを考えていましたが、キャッチできる AlreadyExists 例外はありません..
- 最初にディレクトリ ツリーを作成します (しかし、もっと良い方法があると思いますか?)
- ディレクトリの作成を重要なセクションとして配置し、それを順次にします-春にこれを行う方法はわかりませんが、とにかくそれが必要であり、プロセスが遅くなりすぎないことを確認してください.
考えすぎかもしれませんが、理論的にはそのような状況が発生する可能性があります。現在は通常の Thread を使用していますが、これには spring TaskExecutor を使用したいと考えています。クリティカルセクションは自分で処理しているのですが、これはシェア変数でもなんでもなく、パスが違うので認識しないと思います。
提案をありがとう。