Back to questions
Junior — Middle
61
Применяются ли в практике такие механизмы, как synchronized, wait и notifyAll, для управления потоками?
Answer from AI
sobes.tech AI
Да, в практике Java-программирования механизмы synchronized, wait и notifyAll применяются для управления потоками, особенно в случаях, когда нужно реализовать низкоуровневую синхронизацию и координацию между потоками.
- synchronized используется для обеспечения взаимного исключения при доступе к общим ресурсам.
- wait() заставляет текущий поток ждать, освобождая монитор, пока другой поток не вызовет notify() или notifyAll().
- notifyAll() пробуждает все потоки, ожидающие на данном объекте.
Однако в современных приложениях чаще применяют более высокоуровневые средства из пакета java.util.concurrent (например, Lock, Semaphore, CountDownLatch), так как они более гибкие и удобные.
Пример использования synchronized, wait и notifyAll:
class SharedResource {
private boolean ready = false;
public synchronized void waitForReady() throws InterruptedException {
while (!ready) {
wait();
}
// продолжить работу
}
public synchronized void setReady() {
ready = true;
notifyAll();
}
}