Ответ 1
AFAIK, int
- это наименьший тип операций CAS, которые могут быть реализованы для разных типов машин.
Примечание: поскольку выделение объектов равно 8 байтам, использование меньшего типа не сохранит никакой памяти.
AtomicBoolean сохраняет свое значение в:
private volatile int value;
Затем, например, извлечение его значения выполняется следующим образом:
public final boolean get() {
return value != 0;
}
В чем причина этого? Почему boolean
не использовался?
AFAIK, int
- это наименьший тип операций CAS, которые могут быть реализованы для разных типов машин.
Примечание: поскольку выделение объектов равно 8 байтам, использование меньшего типа не сохранит никакой памяти.
Вероятно, это возможность основывать несколько классов Atomic
на той же базе (Unsafe
), которая использует целое число и обеспечивает операцию сравнения и свопинга.
Concurrency в Практике дает хорошее объяснение внутренней работы.