我有多個線程來調用一個方法將內容從一個對象寫入文件,如下所示: 當我使用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()
。我真正想要的是使用多個線程來處理此方法調用,因爲這部分代價昂貴且需要大量時間。寫作部分非常快,我並不需要多個線程。
鑑於這種變化,有沒有辦法讓這個方法在併發環境中調用安全?
你可以讓它「同步」,但也許你應該重新思考你的邏輯。你是否真的需要多個線程寫入同一個文件? – Gabriel
寫入相同的輸出目標本質上是不安全的。解釋你認爲你需要的原因會有所幫助;一個可能的解決方案是使用單個閱讀器將文檔發佈到併發隊列中。 – chrylis
@Gabriel,請參閱我的'編輯',並提供您的建議。 – user697911