Я столкнулся с проблемой, когда у меня есть несколько потоков, которые пишут в один и тот же PrintWriter, и не все данные записываются в файл. Я знаю, что многопоточная часть работает правильно, так как я могу печатать все на консоли. Синхронизация операторов записи, похоже, не работает. В чем может быть проблема?
ExecutorService pool = Executors.newFixedThreadPool(poolSize);
for (Integer i : map.keySet()) {
final Collection<String[]> set = map.get(i);
pool.submit(new Runnable() {
public void run() {
StringBuffer sb = Matcher.performCollectionMatch(params);
synchronized (this) {
resultFile.print(sb); //this is a PrintWriter - it does NOT capture all sb
resultFile.flush();
System.out.print(sb); //this actually prints out ALL sb
}
}
});
} //FOR loop