Що таке 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());
}
}
Коментарі