Sobes.tech
Junior — Middle

Омӯзишҳои амалии механизми synchronized, wait ва notifyAll барои идоракунии ҷараёнҳо истифода мешаванд?

sobes.tech AI

Ҷавоб аз 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();
    }
}