В Java каждый объект имеет свой монитор, который может быть использован для синхронизации доступа к объекту из разных потоков. При вызове нестатического метода монитором будет сам объект, для которого этот метод вызван, а при вызове статического метода монитором будет класс, в котором определен этот метод. Таким образом, при вызове нестатического метода монитором будет экземпляр класса, а при вызове статического метода - класс. Для синхронизации доступа к методу можно использовать ключевое слово synchronized в объявлении метода или блоке кода. Пример: public synchronized void doSomething() {
// код метода, который нужно синхронизировать } Также можно использовать объект монитора явно, если нужна более гибкая синхронизация. Для этого нужно получить монитор объекта с помощью ключевого слова synchronized, например: Object monitor = obj;
synchronized (monitor) {
// блок кода, который нужно синхронизировать } Здесь obj - это объект, монитор которого будет использован для синхронизации