Junior — Middle
Používají se v praxi mechanismy jako synchronized, wait a notifyAll pro správu vláken?
sobes.tech AI
Odpověď od AI
Ano, v praxi programování v jazyce Java se mechanismy synchronized, wait a notifyAll používají k řízení vláken, zejména v případech, kdy je třeba implementovat nízkoúrovňovou synchronizaci a koordinaci mezi vlákny.
- synchronized se používá k zajištění vzájemného vyloučení při přístupu ke sdíleným zdrojům.
- wait() způsobí, že aktuální vlákno čeká, uvolní monitor, dokud jiné vlákno nevolá notify() nebo notifyAll().
- notifyAll() probudí všechna vlákna čekající na daném objektu.
Nicméně v moderních aplikacích se častěji používají vyšší úrovně nástrojů z balíčku java.util.concurrent (například Lock, Semaphore, CountDownLatch), protože jsou flexibilnější a pohodlnější.
Příklad použití synchronized, wait a notifyAll:
class SharedResource {
private boolean ready = false;
public synchronized void waitForReady() throws InterruptedException {
while (!ready) {
wait();
}
// pokračovat v práci
}
public synchronized void setReady() {
ready = true;
notifyAll();
}
}