У меня есть одноэлементный регистратор, который содержит вектор.Объекты извне могут добавлять информацию к этому вектору, вызывая singletonLogger.append (String data) и считывать весь вектор, вызывая singletonLogger.getLogEntries (), которая возвращает строку.Было бы неплохо перегрузить метод getLogEntries с помощью параметра int, например, getLogEntries (int x), чтобы иметь возможность получать только последние x записей вместо всего журнала.это было бы легко, что-то вроде:
String getLogEntries(int x) {
int size = vector.size();
for(int i = size; i > (size - x); i--) {
// StringBuilder.append(vector.elementAt....
}
}
Но, конечно, это не совсем безопасно, если учитывать несколько потоков.Представьте, что вектор очищается другим методом вскоре после того, как его размер был определен описанным выше методом, цикл завершится сбоем.
С другой стороны, я не хочу помечать весь метод как синхронизированный, посколькуобработка может длиться 5 - 10 секунд.Это блокирует весь код, который пытается вызвать методы регистратора, верно?
Есть ли другой способ надежно получить последние x элементов вектора?
Спасибо