Sobes.tech
Junior — Middle

პრაქტიკაში გამოიყენება თუ არა ისეთი მექანიზმები, როგორებიცაა synchronized, wait და notifyAll, ნაკადების მართვისთვის?

sobes.tech AI

პასუხი AI-სგან

ஆம், ஜாவா நிரலாக்க நடைமுறையில், 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();
    }
}