Я пытаюсь записать файл. Мне нужно иметь возможность «добавлять» к файлу, а не писать поверх него. Кроме того, мне нужно, чтобы он был потокобезопасным и эффективным. Код, который у меня есть в настоящее время:Безопасность потоков PrintStream в Java
private void writeToFile(String data) {
File file = new File("/file.out");
try {
if (!file.exists()) {
//if file doesnt exist, create it
file.createNewFile();
}
PrintStream out = new PrintStream(new FileOutputStream(file, true));
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
out.println(dateFormat.format(date) + " " + data);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Все работает отлично. Я просто не знаю, является ли PrintStream потокобезопасным или нет. Итак, мой вопрос: Является ли запись в тот же физический файл из нескольких экземпляров PrintStream безопасным? Если да, использует ли он блокировку (снижает производительность) или очереди? Знаете ли вы о каких-либо родных java-библиотеках, которые являются потокобезопасными и используют очередь? Если нет, у меня нет проблем писать свои собственные. Я просто пытаюсь понять, есть ли что-нибудь родное, прежде чем я напишу свой собственный.
'Методы PrintStream'' синхронизированы'. Очередь осуществляется через буфер записи. –
Безопасность нитей PrintStream сама по себе не имеет значения в вашем случае, поскольку вы получаете доступ только через локальный экземпляр. Вы хотели спросить, безопасно ли писать один и тот же физический файл из нескольких экземпляров PrintStream? – assylias
@assylias да. Спасибо за исправление. Я отредактирую свой вопрос, чтобы представить это. –