Տարբերությունը Java-ում քնի և սպասման միջև

Բովանդակություն:

Տարբերությունը Java-ում քնի և սպասման միջև
Տարբերությունը Java-ում քնի և սպասման միջև

Video: Տարբերությունը Java-ում քնի և սպասման միջև

Video: Տարբերությունը Java-ում քնի և սպասման միջև
Video: Javascript - % օպերատոր 2024, Հուլիսի
Anonim

Հիմնական տարբերություն – քուն ընդդեմ սպասելու Java-ում

Sleep-ը և սպասելը Java-ում բազմաթելերի համար օգտագործվող երկու մեթոդներ են: Քնի մեթոդը պատկանում է Thread դասին, մինչդեռ սպասման մեթոդը Object դասից է: Java-ում քնի և սպասման հիմնական տարբերությունն այն է, որ քունն օգտագործվում է ընթացիկ շղթայի կատարումը կասեցնելու համար նշված թվով միլիվայրկյաններով, մինչդեռ սպասման մեթոդն օգտագործվում է ընթացիկ շարանը սպասելու համար, մինչև մեկ այլ շարանը կանչի ծանուցումը կամ notifyAll մեթոդը օբյեկտի համար:

Թելը օպերացիոն համակարգում մշակման ամենափոքր միավորն է: Դա ծրագրի ներսում հսկողության մեկ հաջորդական հոսք է:Թելերը թեթև են: Multithreading-ը մի քանի թելեր միաժամանակ գործարկելու մեխանիզմն է: Ծրագրավորման լեզուները, ինչպիսիք են Java-ն, աջակցում են բազմաթելային: Multithreading-ն ունի առավելություններ, քանի որ այն թույլ է տալիս միաժամանակ մի քանի թելեր վարել, և թելերը միմյանցից անկախ են: Java-ում կան մեթոդներ, որոնք կարող են օգտագործվել բազմաթելերի համար: Նրանցից երկուսը քնում են և սպասում:

Ի՞նչ է քունը Java-ում:

Օպերացիոն համակարգում գործում են բազմաթիվ գործընթացներ: Գործընթացը կատարվող ծրագիր է: Յուրաքանչյուր պրոցես կարող է ունենալ մի քանի թելեր, և այդ թելերի միջև տեղի է ունենում համատեքստի փոխարկում: Java-ում թեմա ստեղծելու երկու եղանակ կա. Դա ընդլայնելով thread դասը կամ Runnable ինտերֆեյսի ներդրմամբ: Thread դասը ունի կոնստրուկտորներ և մեթոդներ՝ թելի վրա գործողություններ ստեղծելու և իրականացնելու համար: Thread դասը ընդլայնում է Object դասը և իրականացնում Runnable ինտերֆեյսը: Runnable ինտերֆեյսը պետք է իրականացվի ցանկացած դասի կողմից, որի օրինակները նախատեսված են շղթայով գործարկվելու համար:Երբ շարանը գործարկվում է, կոդը, որը պետք է կատարվի, գրվում է գործարկման մեթոդի ներսում: Այն շարանը, որը պետք է գործարկվի, ընտրվում է շղթաների ժամանակացույցի կողմից: Մեկ գործընթացում աշխատում է միայն մեկ շարանը:

Թելը անցնում է մի քանի փուլով: Thread դասի օբյեկտ ստեղծելուց հետո ծրագրավորողը կարող է կանչել մեկնարկի մեթոդը։ Մինչ այդ մեթոդը կիրառելը, ասվում է, որ շարանը նոր վիճակում է: Թելերի ժամանակացույցն ընտրում է գործարկման շարանը: Եթե շարանը դեռ ընտրված չէ շղթաների ժամանակացույցի կողմից, բայց եթե գործարկման մեթոդը կանչված է, ապա շարանը գտնվում է գործարկման վիճակում: Այն բանից հետո, երբ շարանը ժամանակացույցն ընտրում է գործարկվող շարանը, այն անցնում է գործարկման վիճակին: Եթե շարանը կենդանի է, բայց ներկայումս չի կարող գործարկվել, ապա այն անգործունակ կամ արգելափակված վիճակում է: Գործարկման մեթոդի ավարտից հետո շարանը գնում է ավարտված վիճակի: Սրանք թելերի կյանքի ցիկլի հիմնական փուլերն են։

Թելերի դասում կան տարբեր մեթոդներ՝ տարբեր առաջադրանքներ կատարելու համար:Քնի մեթոդը օգտագործվում է մեթոդը որոշակի ժամանակով քնելու համար: Քնի մեթոդի շարահյուսությունը հանրային դատարկ քունն է (երկար միլիվայրկյաններով) InterruptedException-ը: Դա հանգեցնում է նրան, որ ներկայումս կատարվող շարանը ժամանակավորապես դադարեցնում է կատարումը որոշակի միլիվայրկյանների համար: Եթե մեկ այլ շարանը ընդհատում է ընթացիկ շարանը, ապա ընթացիկ շղթայի ընդհատված կարգավիճակը ջնջվում է, երբ այս բացառությունը նետվում է:

Քնի և սպասման միջև տարբերությունը Java-ում
Քնի և սպասման միջև տարբերությունը Java-ում

Նկար 01. Java ծրագիր քնի մեթոդով

Ըստ վերոնշյալ ծրագրի՝ գործարկման մեթոդը պարունակում է կոդ, որը պետք է կատարվի։ Հիմնական ծրագրում ստեղծվում է ExampleThread1-ի երկու օբյեկտ, որոնց վրա կանչվում են մեկնարկային մեթոդները։ Դա թույլ կտա գործարկել կոդը գործարկման մեթոդի ներսում: Միաժամանակ աշխատում է միայն մեկ շարանը: Թելով:քնել (1000); թույլ կտա առաջին շարանը դադարեցնել կատարումը 1000 միլիվայրկյանով: Երբ շարանը քնած է, շղթաների ժամանակացույցը վերցնում է մյուս շարանը:

Ի՞նչ է սպասել Java-ում:

Բազմաթիվ շղթաներ կարող են մուտք գործել ընդհանուր ռեսուրս: Դա կարող է առաջացնել սխալ արդյունք: Թեմաների համաժամացումը կարող է օգտագործվել միայն մեկ շղթա ստեղծելու համար՝ ընդհանուր ռեսուրս մուտք գործելու համար: Ենթադրենք իրավիճակը հետևյալ կերպ. Եթե կան երկու շղթաներ, ինչպիսիք են t1 և t2, t1-ը սկսում է արժեքները պահել Text1.txt կոչվող տեքստային ֆայլում: Այդ արժեքները կօգտագործվեն որոշ այլ հաշվարկների համար, երբ t1 վերադառնա: Եթե t2-ը սկսվում է t1-ի վերադարձից առաջ, t2-ը կարող է փոխել t1-ով պահպանված արժեքները: Սա կարող է հանգեցնել t1-ի սխալ արդյունքի: Համաժամացման օգնությամբ, երբ t1-ը սկսում է օգտագործել Text1.txt ֆայլը, այդ ֆայլը կարող է կողպվել, ուստի այն հասանելի է միայն t1-ով։ T2-ը չի կարող փոխել այն, մինչև t1-ը չարձակի կողպեքը՝ այդ տեքստային ֆայլը մուտք գործելու համար: Երբ առաջադրանքն ավարտված է, t1-ը կարող է ազատել կողպեքը: Կողպեքը հայտնի է նաև որպես մոնիտոր:

Թելերի համաժամացմանը կարելի է հասնել միջթելային հաղորդակցության միջոցով: Կրիտիկական բաժինը ծածկագրի հատված է, որը մուտք է գործում ընդհանուր ռեսուրսներ: Թելերի միջև հաղորդակցության մեջ շարանը դադարեցվում է, որն աշխատում է իր կրիտիկական հատվածում, և մեկ այլ շարանը թույլատրվում է մուտք գործել նույն կրիտիկական հատվածում, որը պետք է կատարվի: Այն իրականացվում է սպասման, ծանուցման և ծանուցման բոլոր մեթոդների միջոցով: Նրանք պատկանում են Object դասին։ Սպասման մեթոդն օգտագործվում է, որպեսզի ընթացիկ շարանը բաց թողնի կողպեքը և սպասի, մինչև մեկ այլ շարանը կանչի օբյեկտի համար notify կամ notifyAll մեթոդը: Ծանուցման մեթոդն օգտագործվում է մեկ շարանը արթնացնելու համար, որը սպասում է կողպեքին: «NotifyAll»-ը արթնացնում է կողպեքի վրա սպասող բոլոր շղթաները:

Քնի և սպասման միջև տարբերությունը Java_Figure 02-ում
Քնի և սպասման միջև տարբերությունը Java_Figure 02-ում

Նկար 02. Հաշվիչի դաս

Հիմնական տարբերությունը Java-ում քնի և սպասման միջև
Հիմնական տարբերությունը Java-ում քնի և սպասման միջև

Նկար 03. Հիմնական մեթոդ

Հաշվիչ դասը ընդլայնում է շարանը: Համաժամեցված բլոկը գտնվում է գործարկման մեթոդի ներսում: For loop and notify մեթոդը գտնվում է համաժամացված բլոկի ներսում: Հիմնական մեթոդի ներսում ստեղծվում է թելի օրինակ և մեկնարկային մեթոդը կոչվում է այդ օրինակի վրա: Հիմնական մեթոդը կսպասի մինչև շարանը ծանուցում տա: Ծրագիրը կատարելիս հիմնական մեթոդը սպասում է մինչև գործարկման մեթոդի ամբողջ կատարումը և սպասում է ծանուցման մեթոդին: Երբ ծանուցման մեթոդը կանչվի, հիմնական մեթոդը դադարում է սպասել և սկսում է գործարկել մնացած կոդը: Main-ը սպասում է մինչև Հաշվիչի շարանը ավարտվի: Վերջում տպագրվում է գումարի արդյունքը։

Եթե չկա համաժամեցված բլոկ, և եթե հիմնական մեթոդն ունի ստորև բերված կոդ, այն արդյունքը կտա որպես զրո, քանի որ այն չի սպասում մյուս թեմայի ավարտին:

Calculator t1=նոր Հաշվիչ ();

t1. սկիզբ ();

System.out.println (t1.sum);

Ի՞նչ նմանություն կա քնելու և սպասելու միջև Java-ում:

Եվ քնելը և սպասելը մեթոդներ են, որոնք կարող են օգտագործվել Java-ում բազմալեզու կիրառման ժամանակ

Ո՞րն է տարբերությունը քնելու և սպասելու միջև Java-ում:

քուն ընդդեմ սպասելու Java-ում

Քնի մեթոդը ստիպում է ընթացիկ շարանը կասեցնել աշխատանքը նշված թվով միլիվայրկյաններով՝ հաշվի առնելով համակարգի ժամանակաչափերի և ժամանակացույցերի ճշգրտությունը և ճշգրտությունը: Սպասման մեթոդը ստիպում է ընթացիկ շարանը սպասել, մինչև մեկ այլ շարանը կանչի օբյեկտի համար notify կամ notifyAll մեթոդը:
Կապակցում կողպեքի հետ
Քնի մեթոդը չի ազատում օբյեկտի կողպումը համաժամացման ընթացքում: Սպասման մեթոդն անջատում է կողպումը համաժամացման ընթացքում:
Կատարման մեթոդ
Քնի մեթոդն իրականացվում է ընթացիկ շղթայի վրա: Սպասման մեթոդը կանչվում է օբյեկտի վրա:
հարակից դասարան
Քունը Thread դասի մեթոդ է: Սպասումը Object դասի մեթոդ է:
Ավարտում
Քնի գործընթացը ավարտվում է նշված ժամանակահատվածի ավարտից հետո: Սպասման եղանակն ընդհատվում է՝ զանգահարելով ծանուցել կամ ծանուցելԲոլոր մեթոդները:

Ամփոփում – քնել ընդդեմ սպասել Java-ում

Օպերացիոն համակարգում գործում են բազմաթիվ գործընթացներ: Յուրաքանչյուր գործընթաց կարող է ունենալ մի քանի թելեր: Թելը օպերացիոն համակարգում մշակման ամենափոքր միավորն է: Java ծրագրավորման լեզուն աջակցում է բազմաթելային: Այն թույլ է տալիս միաժամանակ մի քանի թելեր վարել: Քունը և սպասելը երկու մեթոդ են, որոնք կարող են օգտագործվել բազմաշերտություն իրականացնելիս: Java-ում քնի և սպասման միջև տարբերությունն այն է, որ քունն օգտագործվում է ընթացիկ շղթայի կատարումը կասեցնելու համար նշված թվով միլիվայրկյաններով, մինչդեռ սպասման մեթոդն օգտագործվում է ընթացիկ շարանը սպասելու համար, մինչև մեկ այլ շարանը կանչի notify կամ notifyAll: մեթոդ օբյեկտի համար։

Խորհուրդ ենք տալիս: