"హాయ్, అమిగో!
"కొత్తవన్నీ మనం మరచిపోయిన పాతవి మాత్రమే. ఈ రోజు నేను థ్రెడ్లను ఆపడం గురించి మాట్లాడతాను. అంతరాయ() పద్ధతి ఎలా పనిచేస్తుందో మీరు ఇప్పటికే మర్చిపోయారని నేను ఆశిస్తున్నాను."
"అవును, ఎల్లీ, నేను పూర్తిగా మర్చిపోయాను."
"గ్రేట్. అప్పుడు నేను మీకు గుర్తు చేస్తాను."
"జావాలో, ఎవరైనా నడుస్తున్న థ్రెడ్ను ఆపివేయాలనుకుంటే, అతను దానిని థ్రెడ్కు సూచించవచ్చు. దీన్ని చేయడానికి, మీరు థ్రెడ్ ఆబ్జెక్ట్లో దాచిన isInterrupted వేరియబుల్ని trueకి సెట్ చేయాలి."
"ప్రతి థ్రెడ్లో అంతరాయ() పద్ధతి ఉంటుంది, ఇది ఈ ఫ్లాగ్ని సెట్ చేయడానికి ఉపయోగించబడుతుంది. అంతరాయ () పద్ధతిని పిలిచినప్పుడు, థ్రెడ్ ఆబ్జెక్ట్లోని isInterrupted వేరియబుల్ ఒప్పుకు సెట్ చేయబడుతుంది."
"మరియు Thread.sleep() లేదా join() పద్ధతిని థ్రెడ్లో పిలిచినప్పుడు, ప్రస్తుత థ్రెడ్కు isInterrupted ఫ్లాగ్ సెట్ చేయబడిందో లేదో పద్ధతి తనిఖీ చేస్తుంది. ఈ ఫ్లాగ్ సెట్ చేయబడితే (వేరియబుల్ isInterrupted నిజమైనది), అప్పుడు పద్ధతులు అంతరాయ మినహాయింపును వేయండి ."
"ఇక్కడ, నేను మీకు పాత ఉదాహరణను గుర్తు చేస్తాను:"
కోడ్ | వివరణ |
---|---|
|
క్లాక్ యొక్క రన్ పద్ధతి ప్రస్తుత థ్రెడ్ కోసం థ్రెడ్ ఆబ్జెక్ట్ను పొందుతుంది.
ప్రస్తుత థ్రెడ్ యొక్క isInterrupt వేరియబుల్ తప్పుగా ఉన్నంత వరకు క్లాక్ క్లాస్ "టిక్" అనే పదాన్ని సెకనుకు ఒకసారి కన్సోల్కు వ్రాస్తుంది. isInterrupt నిజం అయినప్పుడు, రన్ పద్ధతి ముగుస్తుంది. |
|
ప్రధాన థ్రెడ్ చైల్డ్ థ్రెడ్ (గడియారం)ని ప్రారంభిస్తుంది, అది ఎప్పటికీ నడుస్తుంది.
10 సెకన్లు వేచి ఉండి , అంతరాయ పద్ధతికి కాల్ చేయడం ద్వారా టాస్క్ను రద్దు చేయండి. ప్రధాన థ్రెడ్ దాని పనిని పూర్తి చేస్తుంది. గడియారం థ్రెడ్ దాని పనిని పూర్తి చేస్తుంది. |
"ఇక్కడ మేము రన్ పద్ధతిలో అనంతమైన లూప్లో భాగంగా నిద్ర పద్ధతిని ఉపయోగిస్తాము . లూప్లో, isInterrupt వేరియబుల్ స్వయంచాలకంగా తనిఖీ చేయబడుతుంది. ఒక థ్రెడ్ స్లీప్ మెథడ్ని కాల్ చేస్తే, ఆ థ్రెడ్కి isInterrupt నిజమా కాదా అని మెథడ్ మొదట తనిఖీ చేస్తుంది (ది స్లీప్ మెథడ్ అని పిలవబడేది). ఇది నిజమైతే, ఆ పద్ధతి నిద్రపోదు. బదులుగా, ఇది అంతరాయ మినహాయింపును విసురుతుంది ."
"కానీ ఈ ఉదాహరణలో, మేము లూప్ కండిషన్లోని isInterrupted వేరియబుల్ని నిరంతరం తనిఖీ చేస్తాము."
"మేము ఈ విధానాన్ని ఉపయోగించలేకపోవడానికి కొన్ని కారణాలు ఉన్నాయని నాకు గుర్తుంది. మీరు నాకు గుర్తు చేయగలరా?"
" మొదట , రన్ పద్ధతికి ఎల్లప్పుడూ లూప్ ఉండదు. ఈ పద్ధతి కేవలం ఇతర పద్ధతులకు కొన్ని డజన్ల కాల్లను కలిగి ఉండవచ్చు. ఈ సందర్భంలో, మీరు ప్రతి మెథడ్ కాల్కి ముందు isInterrupted చెక్ని జోడించాలి."
" రెండవది , అనేక విభిన్న చర్యలతో కూడిన కొన్ని పద్ధతులు అమలు చేయడానికి చాలా సమయం పట్టవచ్చు."
" మూడవది , ఒక మినహాయింపును విసిరివేయడం అనేది isInterrupted చెక్ని భర్తీ చేయదు. ఇది కేవలం అనుకూలమైన అదనంగా ఉంటుంది. విసిరిన మినహాయింపు కాల్ స్టాక్ను రన్ పద్ధతికి త్వరగా విడదీయడానికి మిమ్మల్ని అనుమతిస్తుంది ."
" నాల్గవది , స్లీప్ పద్దతి చాలా ఉపయోగించబడుతుంది. ఈ సహాయక పద్ధతిని అవ్యక్త తనిఖీ ద్వారా మెరుగుపరచబడిందని తేలింది, ఇది తక్కువ ఉపయోగకరంగా ఉండదు. ఇది ఎవరూ ప్రత్యేకంగా చెక్కును జోడించనట్లుగా ఉంది, కానీ అది ఉంది. మీరు ఉన్నప్పుడు ఇది చాలా విలువైనది . వేరొకరి కోడ్ని ఉపయోగిస్తున్నారు మరియు మీరు చెక్ను మీరే జోడించలేరు."
" ఐదవది , అదనపు తనిఖీ పనితీరు క్షీణించదు. నిద్ర పద్ధతిని కాల్ చేయడం అంటే థ్రెడ్ ఏమీ చేయకూడదు (నిద్ర తప్ప), కాబట్టి అదనపు పని ఎవరినీ ఇబ్బంది పెట్టదు."
"ఇదే మీరు ఇంతకు ముందు చెప్పారు."
"మరియు మీ ప్రకటన గురించి ఏమిటి, « థ్రెడ్ ఆపివేయబడుతుందని ఎవరూ హామీ ఇవ్వలేరు. ఒక థ్రెడ్ మాత్రమే ఆగిపోతుంది. » మీరు దానిని వివరించగలరా?"
"తప్పకుండా."
"గతంలో, జావా యొక్క ప్రారంభ సంస్కరణల్లో, థ్రెడ్లు స్టాప్() పద్ధతిని కలిగి ఉన్నాయి. మరియు మీరు దానిని పిలిచినప్పుడు, JVM వాస్తవానికి థ్రెడ్ను ఆపివేసింది. కానీ JVM వెలుపల థ్రెడ్ ఏదైనా చేస్తుంటే (ఉదాహరణకు, ఫైల్కి వ్రాయడం లేదా కాల్ చేయడం OS విధులు) ఈ విధంగా అంతరాయం ఏర్పడినప్పుడు, అంతరాయం చాలా సమస్యలను కలిగించింది, అంటే మూసివేయబడని ఫైల్లు, విడుదల చేయని సిస్టమ్ వనరులు మొదలైనవి."
"జావా సృష్టికర్తల సాధారణ సమావేశం థ్రెడ్లను బలవంతంగా ఆపే పద్ధతిని తీసివేయాలని నిర్ణయించింది. ఇప్పుడు మనం చేయగలిగింది ఒక నిర్దిష్ట ఫ్లాగ్ (ఇస్ఇంటరప్టెడ్) మరియు థ్రెడ్ కోడ్ సరిగ్గా వ్రాయబడిందని, తద్వారా ఈ ఫ్లాగ్ ప్రాసెస్ చేయబడుతుంది. ఈ ఫ్లాగ్ థ్రెడ్, స్టాప్, ప్లీజ్. ఇది చాలా ముఖ్యం!' అని చెప్పే సంకేతం లాంటిది. కానీ అది ఆగిపోతుందా లేదా అనేది దాని స్వంత వ్యాపారం."
"అయితే అంతరాయ మినహాయింపు గురించి ఏమిటి?"
"ఈ థ్రెడ్లో రన్ అవుతున్న కోడ్లో ట్రై-క్యాచ్ బ్లాక్ల సమూహం ఉంటే ఏమి చేయాలి? ఎక్కడో ఒక అంతరాయ మినహాయింపు సంభవించినప్పటికీ, కొన్ని ట్రై-క్యాచ్లు దానిని క్యాచ్ చేసి మరచిపోతాయని ఖచ్చితంగా హామీ లేదు. కాబట్టి హామీలు లేవు థ్రెడ్ ఆగిపోతుంది."
"మరొక విషయం ఏమిటంటే, థ్రెడ్లు ఇప్పటికే చాలా తక్కువ-స్థాయి ప్రోగ్రామింగ్గా పరిగణించబడుతున్నాయి. కానీ నేను దాని గురించి తదుపరిసారి మీకు చెప్తాను."
"నువ్వు ఎల్లీ కాదు-నువ్వు షెహెరాజాడే!"
"కాబట్టి, ఏమిగో! ప్రస్తుత పాఠంలో ప్రతిదీ స్పష్టంగా ఉందా?"
"అవును."
"సరే మంచిది."
GO TO FULL VERSION