Что такое synchronized в Java?
Ключевое слово synchronized используется для обеспечения синхронизации доступа к разделяемым ресурсам в многопоточных приложениях. Синхронизация помогает предотвратить конфликты и гарантировать корректное выполнение критических секций кода.
Основные моменты:
- Обеспечение атомарности:
synchronizedприменяется к методам или блокам кода и гарантирует, что только один поток может выполнять этот участок кода в любой момент времени.
- Ключевое слово
thisиsynchronizedметоды:- Если метод объявлен с ключевым словом
synchronized, то он считается синхронизированным и блокирует доступ к объекту, на котором вызывается метод.
- Если метод объявлен с ключевым словом
- Синхронизация блоков кода:
- Кроме синхронизации методов, можно использовать блоки кода с ключевым словом
synchronized, чтобы ограничить доступ к части кода, не включая весь метод.
- Кроме синхронизации методов, можно использовать блоки кода с ключевым словом
class Counter {
private int count = 0;
public void increment() {
synchronized (this) { count++; }
}
public void decrement() {
synchronized (this) { count--; }
}
public int getCount() { return count; }
}
public class Main {
public static void main(String[] args) throws InterruptedException {
Counter counter = new Counter();
Thread incThread = new Thread(() -> { for (int i = 0; i < 100000; i++) counter.increment(); });
Thread decThread = new Thread(() -> { for (int i = 0; i < 100000; i++) counter.decrement(); });
incThread.start(); decThread.start();
incThread.join(); decThread.join();
System.out.println("Final Count: " + counter.getCount());
}
}
Комментарии