Является ли BufferedWriter.append в потоке Java безопасным? - PullRequest
0 голосов
/ 14 ноября 2018

Итак, у меня есть файл, в который несколько потоков пытаются записать одновременно.

Я использовал Buffered Writer для записи в файл.Теперь мой вопрос: если использовать append для добавления содержимого потока в файл, будет ли он безопасен для потока?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Одна из проблем, связанных с вопросом "является ли он безопасным для потоков", заключается в том, что ответ зависит от того, что вы подразумеваете под безопасностью потоков.

Класс может быть потокобезопасным в том смысле, что его собственные инварианты не могут быть нарушены при его использовании несколькими потоками одновременно; но вы все равно можете использовать этот класс без поточной защиты.

Например:

void write(int a, String blah) {
  writer.write(a);
  writer.write(blah);
}

Эти две записи не выполняются атомарно, поэтому существует вероятность, что записи из двух потоков чередуются.

Если у вас есть какие-либо сомнения относительно безопасности потоков, управляйте ими самостоятельно.

0 голосов
/ 14 ноября 2018

Когда вы проверяете реализацию, вы видите, что существует объект блокировки, и методы, такие как write или flush, синхронизируются с общим объектом lock.

synchronized (lock) {
  ... here is the body of the method, enclosed in the sync block
}
...