CodeGym /జావా కోర్సు /మాడ్యూల్ 3 /సింక్రొనైజర్‌లు: జావాలో వనరులకు సమకాలీకరణ యాక్సెస్

సింక్రొనైజర్‌లు: జావాలో వనరులకు సమకాలీకరణ యాక్సెస్

మాడ్యూల్ 3
స్థాయి , పాఠం
అందుబాటులో ఉంది

సెమాఫోర్

ఫైల్ సిస్టమ్‌తో పనిచేసేటప్పుడు థ్రెడ్‌ల సంఖ్యను పరిమితం చేయడానికి అవసరమైనప్పుడు సెమాఫోర్లు సాధారణంగా ఉపయోగించబడతాయి. ఫైల్ లేదా ఇతర షేర్డ్ రిసోర్స్‌కి యాక్సెస్ కౌంటర్ ద్వారా నియంత్రించబడుతుంది. దాని విలువ సున్నా కంటే ఎక్కువగా ఉంటే, యాక్సెస్ అనుమతించబడుతుంది, కానీ అదే సమయంలో కౌంటర్ తగ్గుతుంది.

కౌంటర్ సున్నాని తిరిగి ఇచ్చే సమయంలో, వనరు మరొక థ్రెడ్ ద్వారా విడుదలయ్యే వరకు ప్రస్తుత థ్రెడ్ బ్లాక్ చేయబడుతుంది. అనుమతుల పరామితి సంఖ్య తప్పనిసరిగా కన్స్ట్రక్టర్ ద్వారా సెట్ చేయబడాలి.

మీరు మీ కంప్యూటర్ లేదా ల్యాప్‌టాప్ యొక్క శక్తిని బట్టి ఈ పరామితిని వ్యక్తిగతంగా ఎంచుకోవాలి.

public class Main {

   public static void main(String[] args) {
       Semaphore sem = new Semaphore(1);
       CommonResource res = new CommonResource();
       new Thread(new MyThread(res, sem, "MyThread_1")).start();
       new Thread(new MyThread(res, sem, "MyThread_2")).start();
       new Thread(new MyThread(res, sem, "MyThread_3")).start();
   }
}

class CommonResource {
   int value = 0;
}

class MyThread implements Runnable {
   CommonResource commonResource;
   Semaphore semaphore;
   String name;
   MyThread(CommonResource commonResource, Semaphore sem, String name) {
       this.commonResource = commonResource;
       this.semaphore = sem;
       this.name = name;
   }

   public void run() {

       try {
           System.out.println(name + "waiting permission");
           semaphore.acquire();
           commonResource.value = 1;
           for (int i = 1; i < 7; i++) {
               System.out.println(this.name + ": " + commonResource.value);
               commonResource.value++;
               Thread.sleep(150);
           }
       } catch (InterruptedException e) {
           System.out.println(e.getMessage() + " " + name);
           Thread.currentThread().interrupt();
       }
       System.out.println(name + "releases permission");
       semaphore.release();
   }
}

కౌంట్‌డౌన్‌లాచ్ మరియు ఇతరులు

CountDownLatch - ఇతర థ్రెడ్‌లలో నిర్దిష్ట సంఖ్యలో నిర్వహించబడే ఆపరేషన్‌లు పూర్తయ్యే వరకు వేచి ఉండటానికి బహుళ థ్రెడ్‌లను అనుమతిస్తుంది. ఒక అప్లికేషన్ యొక్క ఇన్‌స్టాలేషన్ ఒక ఉదాహరణ: మీరు వినియోగ నిబంధనలను అంగీకరించే వరకు, కొత్త ప్రోగ్రామ్‌ను ఇన్‌స్టాల్ చేసే ఫోల్డర్‌ను ఎంచుకునే వరకు ఇది ప్రారంభం కాదు. దీని కోసం ప్రత్యేక కౌంట్‌డౌన్() పద్ధతి ఉంది- ఈ పద్ధతి కౌంట్ డౌన్ కౌంటర్‌ను ఒక్కొక్కటిగా తగ్గిస్తుంది.

గణన సున్నాకి వెళ్ళిన వెంటనే, వేచి ఉన్న అన్ని వెయిటింగ్ థ్రెడ్‌లు తమ పనిని కొనసాగిస్తాయి మరియు వేచి ఉన్న అన్ని తదుపరి కాల్‌లు వేచి ఉండకుండా పాస్ అవుతాయి. కౌంట్ డౌన్ కౌంటర్ ఒక పర్యాయ కౌంటర్ మరియు రీసెట్ చేయడం సాధ్యం కాదు.

CyclicBarrier - ఒక పాయింట్ వద్ద ఇచ్చిన థ్రెడ్‌ల సంఖ్యను సమకాలీకరించడానికి ఉపయోగిస్తారు. N థ్రెడ్‌లు నిరీక్షణ(...) పద్ధతిని పిలిచి బ్లాక్ చేసినప్పుడు అవరోధం చేరుకుంటుంది. ఆ తర్వాత, కౌంటర్ దాని అసలు విలువకు రీసెట్ చేయబడుతుంది మరియు వేచి ఉండే థ్రెడ్‌లు విడుదల చేయబడతాయి. అదనంగా, అవసరమైతే, థ్రెడ్‌లను అన్‌బ్లాక్ చేయడానికి మరియు కౌంటర్‌ను రీసెట్ చేయడానికి ముందు కస్టమ్ కోడ్‌ని అమలు చేయడం సాధ్యపడుతుంది. దీన్ని చేయడానికి, రన్ చేయదగిన ఇంటర్‌ఫేస్ అమలుతో ఒక వస్తువు.

ఎక్స్‌ఛేంజర్<V> ఎక్స్‌ఛేంజర్ క్లాస్ థ్రెడ్‌ల మధ్య డేటా మార్పిడి కోసం ఉద్దేశించబడింది. ఇది టైప్ చేయబడింది మరియు థ్రెడ్‌లు మార్పిడి చేయాల్సిన డేటా రకాన్ని టైప్ చేస్తుంది.

ఈ తరగతి యొక్క ఏకైక మార్పిడి() పద్ధతిని ఉపయోగించి డేటా మార్పిడి చేయబడుతుంది :

V exchange(V x) throws InterruptedException
V exchange(V x, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException

X పరామితి మార్పిడి చేయవలసిన డేటా బఫర్‌ను సూచిస్తుంది. పద్ధతి యొక్క రెండవ రూపం గడువు పరామితి , సమయం ముగిసింది మరియు యూనిట్ , సమయం ముగిసిన పరామితి కోసం ఉపయోగించాల్సిన సమయ యూనిట్ రకాన్ని కూడా నిర్వచిస్తుంది .

ఫేజర్ క్లాస్ మొత్తం చర్య యొక్క అమలులో ఒకే దశ లేదా దశను సూచించే థ్రెడ్‌లను సమకాలీకరించడానికి మిమ్మల్ని అనుమతిస్తుంది. ఫేజర్ ఒక నిర్దిష్ట దశ పూర్తయ్యే వరకు వేచి ఉండే సమకాలీకరణ వస్తువును నిర్వచిస్తుంది. ఫేజర్ తదుపరి దశ లేదా దశకు వెళుతుంది మరియు అది మళ్లీ పూర్తయ్యే వరకు వేచి ఉంటుంది .

ఫేజర్ క్లాస్‌తో పని చేస్తున్నప్పుడు , మొదట దాని వస్తువును సృష్టించడం సర్వసాధారణం. తరువాత, మేము పాల్గొనే వారందరినీ నమోదు చేసుకోవాలి. ప్రతి పార్టిసిపెంట్ కోసం రిజిస్టర్ చేసుకోవడానికి, రిజిస్టర్() పద్ధతి అంటారు , లేదా మీరు ఫేజర్ కన్స్ట్రక్టర్‌కు అవసరమైన సంఖ్యలో పాల్గొనేవారిని పంపడం ద్వారా ఈ పద్ధతి లేకుండా చేయవచ్చు .

అప్పుడు ప్రతి పాల్గొనేవారు దశను రూపొందించే నిర్దిష్ట చర్యలను చేస్తారు. మరియు పాల్గొనే వారందరూ దశ యొక్క అమలును పూర్తి చేసే వరకు ఫేజర్ సింక్రోనైజర్ వేచి ఉంటుంది. దశ ముగిసిందని సింక్రొనైజర్‌కు తెలియజేయడానికి, పాల్గొనేవారు తప్పనిసరిగా రాక() కి కాల్ చేయాలి లేదా రాకఅండ్అవైట్అడ్వాన్స్() పద్ధతికి కాల్ చేయాలి . సింక్రోనైజర్ తదుపరి దశకు వెళుతుంది.

వ్యాఖ్యలు
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION