TGViewer
Java Portal | Программирование Java Portal | Программирование @java_iibrary · 11.7K subscribers
Post #2444 1.25K
Java: отдавай предпочтение неизменяемым объектам (immutable), чтобы упростить потокобезопасность.

Изменяемое состояние, разделяемое между потоками
public class Balance {
private BigDecimal amount = BigDecimal.ZERO;

public void deposit(BigDecimal v) {
amount = amount.add(v);
}

public BigDecimal get() {
return amount;
}
}


Если два потока одновременно вызовут deposit(), возможны потерянные обновления (lost updates), гонки данных (race conditions) и чтение неконсистентного состояния.

Неизменяемый объект — обновление через создание нового экземпляра
public record Balance(BigDecimal amount) {

public Balance deposit(BigDecimal v) {
return new Balance(amount.add(v));
}
}


Вместо изменения существующего объекта создаётся новый.
Потоки могут безопасно работать со своими снимками состояния (snapshot), а каждый вызов deposit() возвращает новый объект.

Неизменяемые коллекции
List<String> roles = List.of("READ", "WRITE");

Map<String, Integer> limits =
Map.of("free", 10, "pro", 100);


Такие коллекции можно безопасно передавать между потоками без дополнительной синхронизации.

Защитная копия (defensive copy)
Если исходная коллекция всё ещё изменяемая:
List<String> snapshot = List.copyOf(mutableRoles);


Создай неизменяемую копию перед публикацией другим частям приложения.

На практике immutable-подход позволяет существенно сократить количество synchronized, блокировок и ошибок многопоточности. Поэтому современные API Java (record, List.of(), Map.of(), Optional, LocalDateTime) активно используют неизменяемые объекты по умолчанию.

👉 Java Portal
  • ❤ 2
  • 👍 1
More from @java_iibrary
  1. Sep 23, 2026Готовимся к System Design интервью уровня Middle и Senior Полезный конспект по проектирова…
  2. Sep 23, 2026Java-разработчики, знаете разницу между Shallow Copy и Deep Copy? Вы копируете объект, но…
  3. Sep 22, 2026Java-разработчики: Почему ArrayList увеличивает свою ёмкость примерно на 50%, когда заканч…
  4. Sep 22, 2026Прогрев от Java-бабули 🙂 👉 Java Portal
  5. Sep 21, 2026Шпаргалка по проектированию веб систем System Design 101 Подробное руководство по архитект…
  6. Sep 21, 2026💡 Java/Spring: отдавайте предпочтение constructor injection вместо @Autowired для полей.…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →