私は以下のように、オブジェクトからファイルに内容を書き込む際に1つのメソッドを呼び出す複数のスレッドを持っています。 このメソッドをテストするために1つのスレッドを使用すると、ファイルへの出力が期待されます。しかし、複数のスレッドの場合、ファイルへの出力は面倒です。どのようにこのスレッドを安全にするには?スレッドメソッドをスレッドセーフにするには?
void (Document doc, BufferedWriter writer){
Map<Sentence, Set<Matrix>> matrix = doc.getMatrix();
for(Sentence sentence : matrix.keySet()){
Set<Matrix> set = doc.getMatrix(sentence);
for(Matrix matrix : set){
List<Result> results = ResultGenerator.getResult();
writer.write(matrix, matrix.frequency());
writer.write(results.toString());
writer.write("\n");
}
}
}
編集:
私は、この行List<Result> results = ResultGenerator.getResult()
を追加しました。私が本当に望むのは、このメソッド呼び出しを処理するために複数のスレッドを使用することです。なぜなら、この部分は高価で時間がかかるからです。書く部分は非常に速く、私は本当に複数のスレッドを必要としません。
この変更が与えられた場合、このメソッドを同時環境で安全に呼び出す方法はありますか?
これを 'synchronized'にすることはできますが、ロジックを再考する必要があります。あなたは_同じスレッドに複数のスレッドを書く必要がありますか? – Gabriel
同じ出力先への書き込みは、本質的に安全ではありません。なぜあなたは助けになる必要があると思うかを説明します。 1つのリーダーで並行キューに文書をポストするようなことをするのが有力な解決策です。 – chrylis
@Gabriel、私の '編集'を見て、あなたの提案を提供してください。 – user697911