బహుళ-థ్రెడ్ ప్రోగ్రామ్లు క్రమం తప్పకుండా బహుళ పరిస్థితులతో రావచ్చు మోసపూరిత మరియు ఆశ్చర్యకరమైన ఫలితాలను ఉత్పత్తి చేసే అదే వనరును పొందడానికి ప్రయత్నిస్తుంది. జావాలో సమకాలీకరణను ఉపయోగించడం ద్వారా దీనిని పరిష్కరించవచ్చు. ఒక నిర్దిష్ట థ్రెడ్ సమయం యొక్క నిర్దిష్ట ఉద్దేశ్యంతో వనరును పొందగలదు. సమకాలీకరణ వ్యూహంతో పరిచయం పొందడానికి ఈ వ్యాసం మీకు సహాయం చేస్తుంది.
నేను ఈ క్రమంలో విషయాలను చర్చిస్తాను:
- జావాలో సమకాలీకరణను ఎందుకు ఉపయోగించాలి?
- సమకాలీకరణ రకాలు
- జావాలో తాళాలు
- సమకాలీకరణ లేకుండా బహుళ-థ్రెడింగ్
- సమకాలీకరణతో బహుళ-థ్రెడింగ్
- సమకాలీకరించబడిన కీవర్డ్
- సమకాలీకరించబడిన కీవర్డ్ మరియు సమకాలీకరించబడిన బ్లాక్ మధ్య వ్యత్యాసం
ప్రారంభిద్దాం!
జావాలో సమకాలీకరణను ఎందుకు ఉపయోగించాలి?
మీరు ప్రోగ్రామ్ లోపల కనీసం రెండు థ్రెడ్లతో ప్రారంభిస్తే, బహుళ థ్రెడ్లు ఒకే వనరును పొందడానికి ప్రయత్నించినప్పుడు అవకాశం ఉండవచ్చు. ఉమ్మడి సమస్యల కారణంగా ఇది unexpected హించని ఫలితాన్ని కూడా సృష్టించగలదు.
సింటాక్స్ :
సమకాలీకరించబడింది (ఆబ్జెక్టిడెంటిఫైయర్) shared // షేర్డ్ వేరియబుల్స్ మరియు ఇతర షేర్డ్ వనరులను యాక్సెస్ చేయండి}
ఉదాహరణకి, సమానమైన ఫైల్లో వ్రాయడానికి ప్రయత్నిస్తారు. థ్రెడ్లలో ఒకటి డేటాను భర్తీ చేయగలదు లేదా థ్రెడ్ తెరిచినప్పుడు ఇది డేటాను పాడు చేస్తుందిఅదే ఫైల్ అదే సమయంలో, మరొక థ్రెడ్ అదే ఫైల్ను మూసివేస్తూ ఉండవచ్చు.బహుళ థ్రెడ్ల చర్యను సమకాలీకరించాల్సిన అవసరం ఉంది. అనే భావనను ఉపయోగించి దీన్ని అమలు చేయవచ్చు ఓం ఆనిటర్లు .
- ప్రతి థ్రెడ్ లాక్ చేయగల లేదా అన్లాక్ చేయగల మానిటర్తో అనుబంధించబడింది.
- ఒక సమయంలో ఒక థ్రెడ్ మాత్రమే మానిటర్లో లాక్ని కలిగి ఉంటుంది.
- జావా ప్రోగ్రామింగ్ లాంగ్వేజ్ థ్రెడ్లను సృష్టించడానికి మరియు వారి పనిని సమకాలీకరించడానికి చాలా సులభ మార్గాన్ని అందిస్తుంది సమకాలీకరించబడింది బ్లాక్స్.
- ఇది భాగస్వామ్య వనరులను ఈ ప్రత్యేక బ్లాక్లో ఉంచుతుంది.
జావాలో సమకాలీకరించబడిన బ్లాక్లు గుర్తించబడ్డాయి సమకాలీకరించబడింది కీవర్డ్. జావాలోని ఈ బ్లాక్ కొన్ని వస్తువుపై సమకాలీకరించబడింది.ఒకే వస్తువుపై సమకాలీకరించబడిన అన్ని బ్లాక్లు ఒకే సమయంలో ఒక థ్రెడ్ను మాత్రమే అమలు చేయగలవు. సమకాలీకరించబడిన బ్లాక్లోకి ప్రవేశించడానికి ప్రయత్నించే అన్ని ఇతర థ్రెడ్లు సింక్రొనైజ్డ్ బ్లాక్లోని థ్రెడ్ బ్లాక్ నుండి నిష్క్రమించే వరకు నిరోధించబడతాయి.
సమకాలీకరణ రకాలు
ప్రాథమికంగా రెండు రకాల సమకాలీకరణ అందుబాటులో ఉంది. వారు:
- ప్రాసెస్ సింక్రొనైజేషన్: ఒక స్థితికి చేరుకోవడానికి బహుళ థ్రెడ్లు లేదా ప్రక్రియలను ఏకకాలంలో అమలు చేయడం, అవి ఒక నిర్దిష్ట శ్రేణి చర్యలకు కట్టుబడి ఉంటాయి.
- థ్రెడ్ సమకాలీకరణ: ఒకటి కంటే ఎక్కువ థ్రెడ్ ఉన్న సమయాల్లోభాగస్వామ్య వనరును ప్రాప్యత చేయడానికి ప్రయత్నిస్తుంది, వద్ద వనరు ఒక థ్రెడ్ ద్వారా మాత్రమే ఉపయోగించబడుతుందని మీరు నిర్ధారించుకోవాలిఒక సమయం.
ఈ రకాల వివరాలను తెలుసుకోకుండా, తాళాలు ఏమిటో అర్థం చేసుకోవడానికి ప్రయత్నిద్దాం .
జావాలో తాళాలు
నేను ఇంతకు ముందే చెప్పినట్లుగా, సమకాలీకరణ అనేది ఒక అంతర్గత సంస్థ చుట్టూ నిర్మించబడింది లాక్ లేదా మానిటర్ . ప్రతి వస్తువుకు దానితో సంబంధం ఉన్న లాక్ ఉంటుంది. కాబట్టి వస్తువు యొక్క ఫీల్డ్లకు స్థిరమైన ప్రాప్యత అవసరమయ్యే థ్రెడ్ వాటిని యాక్సెస్ చేయడానికి ముందు ఆబ్జెక్ట్ యొక్క లాక్ని పొందాలి, ఆపై పని పూర్తయినప్పుడు లాక్ని విడుదల చేయాలి.
జావా 5 నుండి, java.util.concurrent.locks ప్యాకేజీలో అనేక లాక్ అమలులు ఉన్నాయి.
ప్రారంభ కోసం విజువల్ స్టూడియో ట్యుటోరియల్స్
లాక్ ఇలా ఉంటుంది:
పబ్లిక్ క్లాస్ లాక్ {ప్రైవేట్ బూలియన్ isLocked = తప్పుడు పబ్లిక్ సింక్రొనైజ్డ్ శూన్య లాక్ () ఇంటరప్టెడ్ ఎక్సెప్షన్ విసురుతుంది {(isLocked) {వేచి ఉండండి ()} isLocked = true} పబ్లిక్ సింక్రొనైజ్డ్ శూన్య అన్లాక్ () {isLocked = false notify ()}}
లాక్ () పద్ధతి లాక్ ఉదాహరణను లాక్ చేస్తుంది, తద్వారా అన్లాక్ () అమలు అయ్యే వరకు లాక్ () అని పిలిచే అన్ని థ్రెడ్లు నిరోధించబడతాయి.
సమకాలీకరణ లేకుండా బహుళ-థ్రెడింగ్
ఇక్కడ ఒక సరళమైన ఉదాహరణ కౌంటర్ విలువను ఒక క్రమంలో ముద్రిస్తుంది మరియు మేము దానిని అమలు చేస్తున్న ప్రతిసారీ, ఇది థ్రెడ్కు CPU లభ్యత ఆధారంగా వేరే ఫలితాన్ని ఇస్తుంది. దీన్ని తనిఖీ చేయండి!
తరగతి మల్టీథ్రెడ్ {పబ్లిక్ శూన్య ప్రింట్కౌంట్ () {ప్రయత్నించండి {(int i = 5 i<0 i--) { System.out.println('Counter --- ' + i ) } } catch (Exception e) { System.out.println('Thread interrupted.') } } } class Thread extends Multithread { private Thread t private String threadName Multithread MT Thread( String name, Multithread mt) { threadName = name MT= mt } public void run() { MT.printCount() System.out.println('Thread ' + threadName + ' exiting.') } public void start () { System.out.println('Starting ' + threadName ) if (t == null) { t = new Thread (this, threadName) t.start () } } } public class TestThread { public static void main(String args[]) { Multithread MT = new Multithread() Thread t = new Thread( 'Thread - 1 ', MT) Thread t1 = new Thread( 'Thread - 2 ', MT) t.start() t1.start() // wait for threads to end try { t.join() t1.join() } catch ( Exception e) { System.out.println('Interrupted') } } }
పై ప్రోగ్రామ్ యొక్క ఫలితాలు ఇందులో ఉన్నాయి:
రేఖాచిత్రంతో జావాలో mvc నిర్మాణం
సమకాలీకరణతో బహుళ-థ్రెడింగ్
ఇది పైన చెప్పిన ఉదాహరణ, కానీ ఇది క్రమం లో కౌంటర్ విలువను ప్రింట్ చేస్తుంది. మేము దీన్ని అమలు చేసిన ప్రతిసారీ, అదే ఫలితాన్ని ఇస్తుంది.
తరగతి మల్టీథ్రెడ్ {పబ్లిక్ శూన్య ప్రింట్కౌంట్ () {ప్రయత్నించండి {(int i = 5 i> 0 i--) {System.out.println ('కౌంటర్ ---' + i)}} క్యాచ్ (మినహాయింపు ఇ) {సిస్టమ్. out.println ('థ్రెడ్ అంతరాయం కలిగింది.')}}} తరగతి థ్రెడ్ మల్టీథ్రెడ్ను విస్తరించింది {ప్రైవేట్ థ్రెడ్ టి ప్రైవేట్ స్ట్రింగ్ థ్రెడ్నామ్ మల్టీథ్రెడ్ MT థ్రెడ్ (స్ట్రింగ్ పేరు, మల్టీథ్రెడ్ mt) {threadName = name MT = mt} పబ్లిక్ శూన్యత రన్ () {సమకాలీకరించబడింది ( MT) {MT.printCount ()} System.out.println ('Thread' + threadName + 'exiting.')} Public void start () {System.out.println ('Start' + threadName) if (t == శూన్య) {t = క్రొత్త థ్రెడ్ (ఇది, థ్రెడ్ పేరు) t.start ()}}} పబ్లిక్ క్లాస్ టెస్ట్ థ్రెడ్ {పబ్లిక్ స్టాటిక్ శూన్య ప్రధాన (స్ట్రింగ్ అర్గ్స్ []) {మల్టీథ్రెడ్ MT = కొత్త మల్టీథ్రెడ్ () థ్రెడ్ టి = కొత్త థ్రెడ్ ('థ్రెడ్ - 1 ', MT) థ్రెడ్ T1 = కొత్త థ్రెడ్ (' థ్రెడ్ - 2 ', MT) T.start () T1.start () // థ్రెడ్లు ముగిసే వరకు వేచి ఉండండి try T.join () T1.join ()} క్యాచ్ (మినహాయింపు ఇ) {System.out.println ('అంతరాయం')}}}
అవుట్పుట్ క్రింద వర్ణించబడింది:
సమకాలీకరించబడిన కీవర్డ్
సమకాలీకరించబడిన కీవర్డ్ ఒక బ్లాక్ లేదా ఒక పద్ధతిని క్లిష్టమైన విభాగాన్ని సూచిస్తుంది. ఒక క్లిష్టమైన విభాగం అంటే ఒకేసారి ఒక థ్రెడ్ మాత్రమే అమలు చేయబడుతుంది మరియు సమకాలీకరించబడిన విభాగానికి థ్రెడ్ లాక్ను కలిగి ఉంటుంది. ఇది సమకాలీకరించబడింది కీవర్డ్ రాయడానికి సహాయపడుతుంది ఏకకాలంలో ఏదైనా అప్లికేషన్ యొక్క భాగాలు. ఇది బ్లాక్లోని భాగస్వామ్య వనరులను కూడా రక్షిస్తుంది.
సమకాలీకరించిన కీవర్డ్ని వీటితో ఉపయోగించవచ్చు:
కోడ్ బ్లాక్ గురించి చర్చిద్దాం.
సమకాలీకరించబడిన కీవర్డ్: కోడ్ బ్లాక్
సింటాక్స్
సమకాలీకరించబడిన బ్లాక్ రాయడానికి సాధారణ వాక్యనిర్మాణం:
సమకాలీకరించబడింది (లాక్ ఆబ్జెక్ట్) {// సమకాలీకరించిన ప్రకటనలు}
ఒక థ్రెడ్ బ్లాక్ లోపల సమకాలీకరించిన స్టేట్మెంట్లను అమలు చేయాలనుకున్నప్పుడు, అది తప్పనిసరిగా లాక్ ఆబ్జెక్ట్ మానిటర్లోని లాక్ని పొందాలి. ఒకేసారి ఒక థ్రెడ్ మాత్రమే లాక్ ఆబ్జెక్ట్ యొక్క మానిటర్ను పొందగలదు. కాబట్టి ప్రస్తుతం అమలులో ఉన్న థ్రెడ్ లాక్ను సంపాదించి దాని అమలును పూర్తి చేసే వరకు అన్ని ఇతర థ్రెడ్లు వేచి ఉండాలి.
ఈ విధంగా, ది సమకాలీకరించబడింది ఒకేసారి ఒక థ్రెడ్ మాత్రమే సమకాలీకరించబడిన బ్లాక్ స్టేట్మెంట్లను అమలు చేస్తుందని కీవర్డ్ హామీ ఇస్తుంది మరియు తద్వారా బ్లాక్ లోపల ఉన్న షేర్డ్ డేటాను పాడు చేయకుండా బహుళ థ్రెడ్లను నిరోధిస్తుంది.
గమనిక :
- ఒక థ్రెడ్ నిద్రలో ఉంచినట్లయితే (ఉపయోగించడం
నిద్ర ()
పద్ధతి) అప్పుడు అది లాక్ను విడుదల చేయదు. ఈ నిద్ర సమయంలో, సమకాలీకరించబడిన బ్లాక్ స్టేట్మెంట్లను ఏ థ్రెడ్ అమలు చేయదు. - జావా సింక్రొనైజేషన్ విసిరివేయబడుతుంది NullPointerException లాక్ ఆబ్జెక్ట్ ఉపయోగించినట్లయితే ‘ సమకాలీకరించబడింది (లాక్) ‘శూన్యమైనది.
ఇప్పుడు, పద్ధతి గురించి చర్చిద్దాం.
సమకాలీకరించబడిన కీవర్డ్: ఒక పద్ధతి
సింటాక్స్
రాయడానికి సాధారణ వాక్యనిర్మాణం a సమకాలీకరించిన పద్ధతి ఇది:
సమకాలీకరించిన పద్ధతి (పారామితులు) {// సమకాలీకరించబడిన కోడ్}
ఇక్కడ లాక్ఆబ్జెక్ట్ సమకాలీకరించిన స్టేట్మెంట్లను సూచించే మానిటర్తో లాక్ అనుబంధించబడిన వస్తువుకు సూచన.
సమకాలీకరించబడిన బ్లాక్ మాదిరిగానే, థ్రెడ్ తప్పనిసరిగా సమకాలీకరించబడిన పద్ధతితో కనెక్ట్ చేయబడిన మానిటర్ ఆబ్జెక్ట్లోని లాక్ని పొందాలి. సమకాలీకరించిన పద్ధతి విషయంలో, లాక్ వస్తువు:
- ‘.క్లాస్’ వస్తువు - ఇచ్చిన పద్ధతి ఉంటే స్టాటిక్ .
- ‘ఈ’ వస్తువు - పద్ధతి ఉంటే కాని స్థిరంగా . ‘ఇది’ అనేది సమకాలీకరించబడిన పద్ధతిని ప్రారంభించిన ప్రస్తుత వస్తువుకు సూచన.
జావా సమకాలీకరించిన కీవర్డ్ తిరిగి ప్రవేశించిన ప్రకృతి లో. సమకాలీకరించబడిన పద్ధతి అదే లాక్ అవసరమయ్యే మరొక సమకాలీకరించిన పద్ధతిని పిలిస్తే, లాక్ను కలిగి ఉన్న ప్రస్తుత థ్రెడ్ లాక్ను పొందకుండానే ఆ పద్ధతిలో ప్రవేశించవచ్చు.
ఈ వ్యాసం యొక్క చివరి అంశానికి ముందుకు వెళ్దాం మరియు సమకాలీకరించబడిన కీవర్డ్ మరియు సింక్రొనైజేషన్ బ్లాక్ మధ్య ఉన్న ప్రధాన తేడాలను ఎత్తి చూపుదాం.
సమకాలీకరించబడిన కీవర్డ్ మరియు సమకాలీకరించబడిన బ్లాక్ మధ్య వ్యత్యాసం
- మీరు సమకాలీకరించిన కీవర్డ్ని ఉపయోగించినప్పుడు a పద్ధతి , ఇది మొత్తం పద్ధతి కోసం వస్తువులో ఒక లాక్ని పొందుతుంది. దీని అర్థం, ప్రస్తుత థ్రెడ్ అమలు చేయబడినంత వరకు ఇతర థ్రెడ్ ఏ సమకాలీకరించిన పద్ధతిని ఉపయోగించదు.
- సమకాలీకరించబడింది బ్లాక్ సమకాలీకరించబడిన కీవర్డ్ పేర్కొన్న తర్వాత కుండలీకరణాల మధ్య మాత్రమే వస్తువులోని లాక్ని పొందుతుంది. దీని అర్థం, బ్లాక్ నుండి నిష్క్రమించే వరకు ఇప్పటికే లాక్ చేయబడిన వస్తువుపై ఇతర థ్రెడ్ లాక్ పొందదు. కానీ ఇతర థ్రెడ్లు పద్ధతిలో ఉన్న మిగిలిన కోడ్ను యాక్సెస్ చేయగలవు.
జావాలో సమకాలీకరణ ఎలా పనిచేస్తుందో చర్చించిన ఈ వ్యాసం చివరకి ఇది మనలను తీసుకువస్తుంది. ఈ ట్యుటోరియల్లో మీతో పంచుకున్న అన్ని విషయాలతో మీరు స్పష్టంగా ఉన్నారని ఆశిస్తున్నాము.
క్రమబద్ధీకరణ పద్ధతి c ++
చూడండి ప్రపంచవ్యాప్తంగా 250,000 కంటే ఎక్కువ సంతృప్తికరమైన అభ్యాసకుల నెట్వర్క్తో విశ్వసనీయ ఆన్లైన్ లెర్నింగ్ సంస్థ ఎడురేకా చేత. మీ ప్రయాణంలో అడుగడుగునా మీకు సహాయం చేయడానికి మేము ఇక్కడ ఉన్నాము, ఈ జావా ఇంటర్వ్యూ ప్రశ్నలతో పాటుగా, మేము జావా డెవలపర్గా ఉండాలనుకునే విద్యార్థులు మరియు నిపుణుల కోసం రూపొందించిన ఒక పాఠ్యాంశంతో ముందుకు వచ్చాము.
మాకు ప్రశ్న ఉందా? దయచేసి ఈ “జావాలో సమకాలీకరణ” యొక్క వ్యాఖ్యల విభాగంలో పేర్కొనండి ' వ్యాసం మరియు మేము వీలైనంత త్వరగా మిమ్మల్ని సంప్రదిస్తాము.