జావాలో మల్టీథ్రెడింగ్

జావా వర్చువల్ మెషిన్ సమాంతర కంప్యూటింగ్‌కు మద్దతు ఇస్తుంది . అన్ని లెక్కలు ఒకటి లేదా అంతకంటే ఎక్కువ థ్రెడ్‌ల సందర్భంలో నిర్వహించబడతాయి. మేము బహుళ థ్రెడ్‌ల కోసం ఒకే వనరు లేదా వస్తువుకు ప్రాప్యతను సులభంగా సెటప్ చేయవచ్చు, అలాగే ఒకే బ్లాక్ కోడ్‌ని అమలు చేయడానికి థ్రెడ్‌ను సెటప్ చేయవచ్చు.

ఏదైనా డెవలపర్ వారికి కేటాయించిన బహుళ థ్రెడ్‌లను కలిగి ఉన్న వనరుల కోసం రీడ్ మరియు రైట్ ఆపరేషన్ల సమయంలో థ్రెడ్‌లతో పనిని సమకాలీకరించాలి.

వనరును యాక్సెస్ చేసే సమయంలో మీరు తాజా డేటాను కలిగి ఉండటం ముఖ్యం, తద్వారా మరొక థ్రెడ్ దానిని మార్చగలదు మరియు మీరు అత్యంత నవీకరించబడిన సమాచారాన్ని పొందగలరు. మేము బ్యాంక్ ఖాతా యొక్క ఉదాహరణను తీసుకున్నప్పటికీ, డబ్బు వచ్చే వరకు, మీరు దానిని ఉపయోగించలేరు, కాబట్టి ఎల్లప్పుడూ తాజా డేటాను కలిగి ఉండటం ముఖ్యం. థ్రెడ్‌లను సమకాలీకరించడానికి మరియు నిర్వహించడానికి జావా ప్రత్యేక తరగతులను కలిగి ఉంది.

థ్రెడ్ వస్తువులు

ఇది ప్రధాన (ప్రధాన) థ్రెడ్‌తో మొదలవుతుంది, అంటే కనీసం మీ ప్రోగ్రామ్‌లో ఇప్పటికే ఒక రన్నింగ్ థ్రెడ్ ఉంది. ప్రధాన థ్రెడ్ కాల్ చేయగల లేదా రన్ చేయదగినది ఉపయోగించి ఇతర థ్రెడ్‌లను సృష్టించగలదు . సృష్టి రిటర్న్ ఫలితంలో మాత్రమే భిన్నంగా ఉంటుంది, అమలు చేయగలిగినది ఫలితాన్ని అందించదు మరియు తనిఖీ చేయబడిన మినహాయింపును వేయదు. అందువల్ల, ఫైళ్ళతో సమర్థవంతమైన పనిని నిర్మించడానికి మీకు మంచి అవకాశం లభిస్తుంది, కానీ ఇది చాలా ప్రమాదకరమైనది మరియు మీరు జాగ్రత్తగా ఉండాలి.

ప్రత్యేక CPU కోర్‌లో థ్రెడ్ అమలును షెడ్యూల్ చేయడం కూడా సాధ్యమే. సిస్టమ్ థ్రెడ్‌ల మధ్య సులభంగా కదలగలదు మరియు సరైన సెట్టింగ్‌లతో నిర్దిష్ట థ్రెడ్‌ను అమలు చేయగలదు: అంటే, డేటాను చదివే థ్రెడ్ మొదట అమలు చేయబడుతుంది, మన దగ్గర డేటా ఉన్న వెంటనే, మేము దానిని ధ్రువీకరణకు బాధ్యత వహించే థ్రెడ్‌కు పంపుతాము, ఆ తర్వాత మేము దానిని కొన్ని వ్యాపార లాజిక్‌లను అమలు చేయడానికి థ్రెడ్‌కు పాస్ చేస్తాము మరియు వాటిని తిరిగి వ్రాసే కొత్త థ్రెడ్. అటువంటి పరిస్థితిలో, 4 థ్రెడ్లు డేటాను ప్రాసెస్ చేస్తున్నాయి మరియు ప్రతిదీ ఒక థ్రెడ్ కంటే వేగంగా పని చేస్తుంది. అటువంటి ప్రతి స్ట్రీమ్ స్థానిక OS స్ట్రీమ్‌గా మార్చబడుతుంది, అయితే అది ఎలా మార్చబడుతుంది అనేది JVM అమలుపై ఆధారపడి ఉంటుంది.

థ్రెడ్ క్లాస్ థ్రెడ్‌లను సృష్టించడానికి మరియు పని చేయడానికి ఉపయోగించబడుతుంది. ఇది ప్రామాణిక నియంత్రణ యంత్రాంగాలను కలిగి ఉంది, అలాగే java.util.concurrent నుండి తరగతులు మరియు సేకరణలు వంటి వియుక్త వాటిని కలిగి ఉంది .

జావాలో థ్రెడ్ సింక్రొనైజేషన్

వస్తువులకు ప్రాప్యతను భాగస్వామ్యం చేయడం ద్వారా కమ్యూనికేషన్ అందించబడుతుంది. ఇది చాలా ప్రభావవంతంగా ఉంటుంది, కానీ అదే సమయంలో పని చేసేటప్పుడు పొరపాటు చేయడం చాలా సులభం. లోపాలు రెండు సందర్భాలలో వస్తాయి: థ్రెడ్ జోక్యం - మరొక థ్రెడ్ మీ థ్రెడ్‌తో జోక్యం చేసుకున్నప్పుడు మరియు మెమరీ స్థిరత్వం లోపాలు - మెమరీ స్థిరత్వం. ఈ లోపాలను పరిష్కరించడానికి మరియు నిరోధించడానికి, మేము విభిన్న సమకాలీకరణ పద్ధతులను కలిగి ఉన్నాము.

జావాలో థ్రెడ్ సింక్రొనైజేషన్ మానిటర్‌లచే నిర్వహించబడుతుంది, ఇది ఒక సమయంలో ఒకే మానిటర్ ద్వారా రక్షించబడిన కోడ్ బ్లాక్‌ను అమలు చేయడానికి ఒక థ్రెడ్ మాత్రమే అనుమతించే ఒక ఉన్నత-స్థాయి మెకానిజం. మానిటర్ల ప్రవర్తన లాక్స్ పరంగా పరిగణించబడుతుంది; ఒక మానిటర్ - ఒక తాళం.

సమకాలీకరణ మీరు శ్రద్ధ వహించాల్సిన అనేక ముఖ్యమైన అంశాలను కలిగి ఉంది. మొదటి పాయింట్ పరస్పర మినహాయింపు - ఒక థ్రెడ్ మాత్రమే మానిటర్‌ను కలిగి ఉంటుంది, కాబట్టి మానిటర్‌పై సమకాలీకరణ అంటే మానిటర్ ద్వారా రక్షించబడిన సమకాలీకరించబడిన బ్లాక్‌లోకి ఒక థ్రెడ్ ప్రవేశించిన తర్వాత, మానిటర్ ద్వారా రక్షించబడిన బ్లాక్‌లోకి మరే ఇతర థ్రెడ్ ప్రవేశించదు. ఈ మానిటర్ వరకు మొదటి థ్రెడ్ సమకాలీకరించబడిన బ్లాక్ నుండి నిష్క్రమిస్తుంది. అంటే, బహుళ థ్రెడ్‌లు ఒకే సమయంలో ఒకే సమకాలీకరించబడిన బ్లాక్‌ని యాక్సెస్ చేయలేవు.

కానీ సమకాలీకరణ అనేది పరస్పర మినహాయింపు మాత్రమే కాదు. సమకాలీకరణ బ్లాక్‌కు ముందు లేదా లోపల మెమరీకి వ్రాసిన డేటా అదే మానిటర్‌లో సమకాలీకరించబడిన ఇతర థ్రెడ్‌లకు కనిపించేలా చేస్తుంది. బ్లాక్ నుండి నిష్క్రమించిన తర్వాత, మేము మానిటర్‌ను విడుదల చేస్తాము మరియు మరొక థ్రెడ్ దానిని పట్టుకుని, ఈ కోడ్ బ్లాక్‌ని అమలు చేయడం ప్రారంభించవచ్చు.

కొత్త థ్రెడ్ మానిటర్‌ను క్యాప్చర్ చేసినప్పుడు, మేము యాక్సెస్‌ను పొందుతాము మరియు ఆ కోడ్ బ్లాక్‌ని అమలు చేయగల సామర్థ్యాన్ని పొందుతాము మరియు ఆ సమయంలో వేరియబుల్స్ ప్రధాన మెమరీ నుండి లోడ్ చేయబడతాయి. అప్పుడు మానిటర్ యొక్క మునుపటి విడుదల ద్వారా కనిపించే అన్ని ఎంట్రీలను మనం చూడవచ్చు.

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

పరస్పర మినహాయింపు మరియు థ్రెడ్‌ల సమకాలీకరణ యొక్క ప్రభావం, అంటే, వాటి సరైన ఆపరేషన్ సింక్రొనైజ్ చేయబడిన బ్లాక్ లేదా పద్ధతిని నమోదు చేయడం ద్వారా మాత్రమే సాధించబడుతుంది, అది లాక్‌ని పరోక్షంగా పొందుతుంది, లేదా స్పష్టంగా లాక్‌ని పొందడం ద్వారా. మేము దాని గురించి క్రింద మాట్లాడుతాము. పని చేసే రెండు మార్గాలు మీ జ్ఞాపకశక్తిని ప్రభావితం చేస్తాయి మరియు అస్థిర వేరియబుల్స్‌తో పని చేయడం గురించి మర్చిపోకుండా ఉండటం ముఖ్యం .

జావాలో అస్థిర క్షేత్రాలు

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

ఒక వ్రాత మానిటర్ విడుదల లాగా పనిచేస్తుంది మరియు రీడ్ మానిటర్ క్యాప్చర్ లాగా పనిచేస్తుంది. "ముందు ప్రదర్శించిన" రకానికి సంబంధించి యాక్సెస్ నిర్వహించబడుతుంది. మీరు దాన్ని గుర్తించినట్లయితే, అస్థిర వేరియబుల్‌ని యాక్సెస్ చేసినప్పుడు థ్రెడ్ Aకి కనిపించేదంతా థ్రెడ్ B కోసం వేరియబుల్. అంటే, మీరు ఇతర థ్రెడ్‌ల నుండి మీ మార్పులను కోల్పోకూడదని హామీ ఇచ్చారు.

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

జావా ఏకకాలిక

మీరు ఒక సూపర్-ఎఫెక్టివ్ మరియు మల్టీ-థ్రెడ్ అప్లికేషన్‌ను తయారు చేయాలనుకుంటే, మీరు తప్పనిసరిగా Java.util.concurrent ప్యాకేజీలో ఉన్న JavaConcurrent లైబ్రరీ నుండి తరగతులను ఉపయోగించాలి .

లైబ్రరీ చాలా పెద్దది మరియు విభిన్న కార్యాచరణను కలిగి ఉంది, కాబట్టి లోపల ఉన్న వాటిని చూద్దాం మరియు దానిని కొన్ని మాడ్యూల్స్‌గా విభజించండి:

జావా ఏకకాలిక

ఏకకాల సేకరణలు అనేది బహుళ-థ్రెడ్ వాతావరణంలో పని చేయడానికి సేకరణల సమితి. మొత్తం సేకరణకు యాక్సెస్‌ను నిరోధించే ప్రాథమిక రేపర్ Collections.synchronizedListకు బదులుగా, డేటా విభాగాలలో లాక్‌లు ఉపయోగించబడతాయి లేదా డేటాను సమాంతరంగా చదవడానికి వేచి ఉండని అల్గారిథమ్‌లు ఉపయోగించబడతాయి.

క్యూలు - బహుళ-థ్రెడ్ వాతావరణంలో పని చేయడానికి నాన్-బ్లాకింగ్ మరియు బ్లాకింగ్ క్యూలు. నాన్-బ్లాకింగ్ క్యూలు థ్రెడ్‌లను నిరోధించకుండా వేగం మరియు ఆపరేషన్‌పై దృష్టి పెడతాయి. మీరు ప్రొడ్యూసర్ లేదా కన్స్యూమర్ థ్రెడ్‌లను "నెమ్మదిగా" చేయవలసి వచ్చినప్పుడు క్యూలను నిరోధించడం పనికి అనుకూలంగా ఉంటుంది. ఉదాహరణకు, కొన్ని షరతులు నెరవేరని పరిస్థితిలో, క్యూ ఖాళీగా లేదా నిండుగా ఉంది లేదా ఉచిత వినియోగదారు లేదు .

థ్రెడ్‌లను సమకాలీకరించడానికి సింక్రొనైజర్‌లు యుటిలిటీ యుటిలిటీలు. అవి "సమాంతర" కంప్యూటింగ్‌లో శక్తివంతమైన ఆయుధం.

ఎగ్జిక్యూటర్లు అనేది థ్రెడ్ పూల్స్‌ను మరింత సౌకర్యవంతంగా మరియు సులభంగా సృష్టించడానికి ఒక ఫ్రేమ్‌వర్క్, ఫలితాలను పొందడం ద్వారా అసమకాలిక పనుల షెడ్యూల్‌ను సెటప్ చేయడం సులభం.

ప్రాథమిక సమకాలీకరణ , వేచి ఉండండి , తెలియజేయండి , అన్నింటికి తెలియజేయండితో పోలిస్తే లాక్‌లు చాలా సౌకర్యవంతమైన థ్రెడ్ సింక్రొనైజేషన్ మెకానిజమ్‌లు .

అటామిక్స్ అనేది ఆదిమాంశాలు మరియు సూచనలపై పరమాణు కార్యకలాపాలకు మద్దతు ఇవ్వగల తరగతులు.