Предположим, нам нужен потокобезопасный класс под названием Adder, и есть функции добавления и функции получения.
Код: Выделить всё
class Adder {
int counter;
public void add(int a) counter += a;
public int get() return counter;
Сейчас это, очевидно, не является потокобезопасным. Теперь учитывая, что частота использования функции add() составляет 80%, а частота использования get() — 20%. Кроме того, мы разрешаем получение счетчика с задержкой, поэтому функции get не требуется быть потокобезопасной. Как нам следует это реализовать? Очевидно, добавление ключевого слова Synchronized в add() не является хорошим решением, поскольку слишком много потоков будут пытаться получить блокировку, и возникнет состояние гонки.
Кроме того, функция add() всегда должна быть успешной (это означает, что вы не можете использовать неблокирующую блокировку)
Подробнее здесь:
https://stackoverflow.com/questions/615 ... on-where-t