我有多个线程来调用一个方法将内容从一个对象写入文件,如下所示: 当我使用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