Негізгі айырмашылық – ұйқы мен Java-да күту
Ұйқы және күту - бұл Java тілінде көп ағынды жіберу үшін қолданылатын екі әдіс. Ұйқы әдісі Thread сыныбына жатады, ал күту әдісі Object сыныбына жатады. Java-дағы ұйқы мен күту арасындағы негізгі айырмашылық мынада: ұйқы режимі ағымдағы ағынның орындалуын көрсетілген миллисекундтар санына тоқтату үшін пайдаланылады, ал күту әдісі ағымдағы ағынның басқа ағын хабарландыруды шақырғанша күтуіне себепші болу үшін пайдаланылады немесе нысан үшін notifyAll әдісі.
Жіп операциялық жүйедегі өңдеудің ең кіші бірлігі болып табылады. Бұл бағдарлама ішіндегі басқарудың бір ретті ағыны. Жіптер жеңіл. Multithreading - бұл бір уақытта бірнеше ағындарды іске қосу механизмі. Java сияқты бағдарламалау тілдері көп ағымды қолдайды. Көп ағынның артықшылықтары бар, себебі ол бірнеше ағындарды бір уақытта іске қосуға мүмкіндік береді және ағындар бір-бірінен тәуелсіз. Java тілінде көп ағынды жүргізу үшін қолдануға болатын әдістер бар. Олардың екеуі ұйықтап, күтуде.
Java тіліндегі ұйқы дегеніміз не?
Операциялық жүйеде бірнеше процесс жұмыс істейді. Процесс - бұл орындалатын бағдарлама. Әрбір процесте бірнеше ағындар болуы мүмкін және осы ағындар арасында контекстік ауысу орын алады. Java тілінде ағынды құрудың екі жолы бар. Бұл жіп класын кеңейту немесе Runnable интерфейсін енгізу арқылы. Thread класында ағынмен операцияларды жасау және орындау үшін конструкторлар мен әдістер бар. Thread класы Object класын кеңейтеді және Runnable интерфейсін жүзеге асырады. Runnable интерфейсін даналары ағынмен орындауға арналған кез келген сынып орындауы керек. Ағын орындалғанда, орындалуы керек код іске қосу әдісінің ішінде жазылады. Іске қосу керек ағынды ағынды жоспарлаушы таңдайды. Бір процесте тек бір ағын жұмыс істейді.
Жіп бірнеше кезеңнен өтеді. Thread класының объектісін жасағаннан кейін бағдарламашы бастау әдісін шақыра алады. Бұл әдісті шақырмас бұрын, ағын жаңа күйде деп айтылады. Ағынды жоспарлаушы іске қосу үшін ағынды таңдайды. Егер ағынды жоспарлаушы әлі таңдамаса, бірақ бастау әдісі шақырылса, онда ағын орындалатын күйде болады. Ағынды жоспарлаушы орындалатын ағынды таңдағаннан кейін ол жұмыс күйіне өтеді. Егер ағын тірі болса, бірақ қазір іске қосуға жарамсыз болса, ол іске қосылмаған немесе блокталған күйде болады. Іске қосу әдісі аяқталғаннан кейін ағын тоқтатылған күйге өтеді. Бұл жіптің өмірлік циклінің негізгі кезеңдері.
Түрлі тапсырмаларды орындау үшін ағын сыныбында әртүрлі әдістер қолжетімді. Ұйқы әдісі әдісті белгілі бір уақыт ішінде ұйықтау үшін қолданылады. Ұйқы әдісінің синтаксисі - жалпы бос ұйқы (ұзақ миллисекундтар) InterruptedException шығарады. Ол қазіргі орындалатын ағынның көрсетілген миллисекундтар санына орындауды уақытша тоқтатуына әкеледі. Егер басқа ағын ағымдағы ағынды үзсе, осы ерекшелік жойылған кезде ағымдағы ағынның үзілген күйі жойылады.
01-сурет: ұйқы әдісі бар Java бағдарламасы
Жоғарыдағы бағдарламаға сәйкес, іске қосу әдісінде орындалуы қажет код бар. Негізгі бағдарламада ExampleThread1 екі объектісі жасалады және оларда іске қосу әдістері шақырылады. Бұл іске қосу әдісінің ішіндегі кодты іске қосуға мүмкіндік береді. Бір уақытта тек бір ағын орындалады. Жіппен.ұйқы (1000); бірінші ағынға орындауды 1000 миллисекундқа тоқтатуға мүмкіндік береді. Жіп ұйықтап жатқанда, ағынды жоспарлаушы басқа ағынды таңдайды.
Java тілінде күту деген не?
Бірнеше ағын ортақ ресурсқа кіруі мүмкін. Бұл қате шығуды тудыруы мүмкін. Ағынды синхрондауды ортақ ресурсқа қатынасу үшін тек бір ағын жасау үшін пайдалануға болады. Жағдайды келесідей қабылдаңыз. Егер t1 және t2 сияқты екі ағын болса, t1 мәндерді Text1.txt деп аталатын мәтіндік файлға сақтай бастайды. Бұл мәндер t1 қайтарылған кезде кейбір басқа есептеулер үшін пайдаланылады. Егер t2 t1 қайтарылмай тұрып басталса, t2 t1 арқылы сақталған мәндерді өзгерте алады. Бұл t1 қате шығысты қамтамасыз етуі мүмкін. Синхрондау көмегімен t1 Text1.txt файлын пайдалана бастағанда, бұл файлды құлыптауға болады, сондықтан оған тек t1 арқылы қол жеткізуге болады. t1 мәтіндік файлға кіру үшін құлыпты босатпайынша, t2 оны өзгерте алмайды. Тапсырма орындалғаннан кейін t1 құлыпты босатуы мүмкін. Құлып монитор ретінде де белгілі.
Ағынды синхрондауға ағындар аралық байланыс арқылы қол жеткізуге болады. Критикалық бөлім - ортақ ресурстарға қатынасатын код сегменті. Ағын аралық байланыста ағын өзінің критикалық бөлімінде жұмыс істейтін кідіртіледі және орындалатын сол маңызды бөлімге басқа ағынға кіруге рұқсат етіледі. Ол wait, notify және notifyAll әдістері арқылы жүзеге асырылады. Олар Object класына жатады. Күту әдісі ағымдағы ағынға құлыпты босатуға рұқсат беру үшін пайдаланылады және басқа ағын нысан үшін notify немесе notifyAll әдісін шақырғанша күтіңіз. Хабарландыру әдісі құлыптауды күтіп тұрған бір ағынды ояту үшін қолданылады. notifyAll құлыпта күтіп тұрған барлық ағындарды оятады.
02-сурет: Калькулятор класы
03-сурет: Негізгі әдіс
Калькулятор сыныбы тақырыпты кеңейтеді. Синхрондалған блок іске қосу әдісінің ішінде. for циклі және ескерту әдісі синхрондалған блоктың ішінде. Негізгі әдістің ішінде жасалған ағынның данасы және бастау әдісі сол данаға шақырылады. Негізгі әдіс ағын хабарландыру бергенше күтеді. Бағдарламаны орындау кезінде негізгі әдіс іске қосу әдісінің толық орындалуын күтеді және хабарлау әдісін күтеді. Хабарландыру әдісі шақырылғаннан кейін негізгі әдіс күтуді тоқтатады және кодтың қалған бөлігін орындауды бастайды. Негізгі Калькулятор ағыны аяқталғанша күтуде. Соңында қосындының нәтижесі басып шығарылады.
Егер синхрондалған блок болмаса және негізгі әдісте төмендегідей код болса, ол нәтижені нөл ретінде береді, себебі ол басқа ағынның аяқталуын күтпейді.
Калькулятор t1=жаңа Калькулятор ();
t1. бастау ();
System.out.println (t1.sum);
Java тіліндегі ұйқы мен күтудің қандай ұқсастығы бар?
Ұйқы және күту екеуі де Java-да көп ағынды енгізу кезінде қолдануға болатын әдістер
Java тіліндегі ұйқы мен күту арасындағы айырмашылық неде?
ұйқы және Java тілінде күту |
|
Ұйқы әдісі жүйе таймерлері мен жоспарлаушылардың дәлдігі мен дәлдігін ескере отырып, ағымдағы ағынды көрсетілген миллисекундтар санына орындауды тоқтатады. | Күту әдісі ағымдағы ағынның басқа ағын нысан үшін notify немесе notifyAll әдісін шақырғанша күтуіне себеп болады. |
Құлыппен байланыстыру | |
Ұйқы әдісі синхрондау кезінде нысандағы құлыпты босатпайды. | Күту әдісі синхрондау кезінде құлыпты босатады. |
Орындау әдісі | |
Ұйқы әдісі ағымдағы ағында орындалды. | Нысанда күту әдісі шақырылады. |
Байланысты класс | |
Ұйқы - бұл Thread сыныбының әдісі. | Күту - Объект класының әдісі. |
Аяқтау | |
Ұйқы процесі көрсетілген уақыт өткеннен кейін аяқталады. | Күту әдісі notify немесе notifyAll әдістерге қоңырау шалу арқылы үзіледі. |
Қорытынды – Java тілінде ұйықтау және күту
Операциялық жүйеде бірнеше процесс жұмыс істейді. Әрбір процесте бірнеше ағындар болуы мүмкін. Жіп операциялық жүйедегі өңдеудің ең кіші бірлігі болып табылады. Java бағдарламалау тілі көп ағымды қолдайды. Ол бір уақытта бірнеше ағындарды іске қосуға мүмкіндік береді. Ұйқы және күту - бұл көп ағынды енгізу кезінде қолдануға болатын екі әдіс. Java тіліндегі ұйқы мен күту арасындағы айырмашылық мынада: ұйқы режимі ағымдағы ағынның орындалуын көрсетілген миллисекундтар санына тоқтату үшін пайдаланылады, ал күту әдісі ағымдағы ағынның хабарландыру немесе notifyAll шақыруын шақырғанша күту үшін пайдаланылады. нысан әдісі.