В Java‑приложении несколько потоков увеличивают общий счётчик: public class Counter{ private int count = 0; public void inc(){ count++; } } — объясните, почему это небезопасно, как возникают гонки, какие примитивы (synchronized, AtomicInteger, Lock) и паттерны (actor, message passing) решают проблему, и как выбрать баланс между корректностью и производительностью