【发布时间】:2017-10-09 19:09:16
【问题描述】:
我有多个线程来调用一个方法来将内容从对象写入文件,如下所示: 当我使用 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,请查看我的“编辑”,并提出您的建议。
-
@chrylis 为什么它天生就不安全?
-
@user697911 如果我的回答有帮助,请告诉我。
标签: java multithreading concurrency contention