thread sleep thread sleep method java with examples
У овом упутству ћемо разговарати о методи спавања нити () на Јави. Видећемо како Тхреад.Слееп () метода функционише уз помоћ Примера:
Тхе јава.ланг.Тхреад.слееп (дугачки милис) метода је метода коју пружа класа Тхреад која успава тренутно покренуту нит. Навешћемо време спавања као аргумент методе спавања.
=> Овде погледајте водич за почетнике Јава.
Шта ћете научити:
Метода спавања нити () у Јави
Класа Тхреад Јава нуди две варијанте методе спавања.
Прототип обе варијанте методе слееп () је описан у наставку.
# 1) Варијанта начина спавања # 1
Прототип: јавно статично воид слееп (лонг милис) баца ИнтерруптедЕкцептион
Параметри: милис => трајање времена у милисекундама током којег нит спава.
Повратна вредност: празнина
Баца:
- ИллегалАргументЕкцептион => ако је милис негативан
- ИнтерруптедЕкцептион => ако било која друга нит прекида тренутну нит. Када се догоди овај изузетак, прекидани статус нити се брише.
Опис: Ова варијација методе спавања чини да тренутна нит успава или привремено зауставља њено извршавање за задати број милисекунди (наведено у аргументу методе). Међутим, док спава, нит не губи монитор или закључава власништво.
# 2) Варијанта начина спавања # 2
Прототип: јавно статично воид слееп (лонг милис, инт нанос) баца ИнтерруптдЕкцептион
Параметри:
главне разлике између ц и ц ++
- милис => трајање у милисекундама током којих нит мора да спава.
- нанос => додатне наносекунде током којих нит може да спава. Распон је 0 - 999999.
Повратна вредност: празнина
Баца:
- ИллегалАргументЕкцептион => ако је милис вредност негативна или нанос вредност ако је ван опсега.
- ИнтерруптедЕкцептион => ако било која друга нит прекида тренутну нит. Прекинути статус нити се брише када се догоди овај изузетак.
Опис: Ова варијанта методе спавања доводи до тога да нит призива стање мировања или привремено зауставља његово извршавање за задати број милисекунди. (први аргумент у позиву методе). Поред тога, обезбедио је и број наносекунди (други аргумент у позиву методе) за спавање.
Имајте на уму да тачност и прецизност наведеног времена зависе од системских тајмера и планера. Када нит спава, власништво над бравом или монитором се не мења.
Метход оф Тхреад.Слееп
Кад год нит спава или је суспендована, то чини планирач. Метода Тхреад.слееп () комуницира са планером нити тако да планер може проузроковати промјену тренутно покренуте нити да чека стање одређено вријеме.
Када се ово одређено време заврши, стање нити се мења у „изводљиво“ тако да може сачекати да ЦПУ настави са извршењем.
Стога трајање колико дуго нит спава зависи од планера, а не од методе. Како је планер део оперативног система, архитектура ОС такође игра улогу у променама стања нити.
Сад кад смо детаљно видели методу Тхреад.слееп (), требало би да имамо на уму неке тачке док користимо ову методу.
Показивачи укључују:
# 1) Метода Тхреад.слееп () увек зауставља извршавање тренутне нити.
#два) Стварно трајање током којег нит спава зависи од планера и системских тајмера.
На пример, за веома заузет систем, време мировања нити може бити дуже од наведеног, док за систем који није толико заузет може бити мање-више близу одређеног времена.
# 3) Док нит спава, не губи браве или мониторе које је стекао пре спавања.
# 4) Тренутна нит која је у стању спавања може бити прекинута било којом другом нити. У овом случају, баца се „ИнтерруптедЕкцептион“.
Пример Тхреад.слееп у Јави
Пређимо сада на пример који показује методу спавања. Овде имамо класу нити која има метод рун (). У методи рун () називамо „Тхреад.слееп (1000)“. Затим у главној функцији креирамо две инстанце ове нити, тј. Две нити. Затим започињемо нити.
У излазу примећујемо да како су обе нити покренуте, нити су распоређене једна за другом, тј. Када једна спава друга је покренута.
Пример:
class SleepThread extends Thread { //run method for thread public void run() { for(int i=1;i<5;i++) { try { //call sleep method of thread Thread.sleep(1000); }catch(InterruptedException e){System.out.println(e);} //print current thread instance with loop variable System.out.println(Thread.currentThread().getName() + ' : ' + i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread thread_1 = new SleepThread(); SleepThread thread_2 = new SleepThread(); //start threads one by one thread_1.start(); thread_2.start(); } }
Излаз:
Када посматрамо излаз, откривамо да се Тхреад_0 и Тхреад_1 извршавају наизменично.
Тхреад.слееп () са негативном вредношћу времена спавања
Даље, демонстрирајмо још један пример методе Тхреад.слееп (). Овде смо размотрили посебан случај негативне вредности времена спавања. Програм је сличан горе наведеном програму, али предвиђено време спавања је -500.
Пример:
class SleepThread extends Thread { public void run() { for(int i=1;i<5;i++) { try { //call sleep method with negative value of time Thread.sleep(-500); }catch(InterruptedException e){System.out.println(e);} System.out.println(i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread t1=new SleepThread(); SleepThread t2=new SleepThread(); //start the threads one by one t1.start(); t2.start(); } }
Излаз:
ц ++ како се користи стрингстреам
Из резултата можемо видети да је метода бацила „ИллегалАргументЕкцептион“ јер негативна вредност времена спавања није прихватљива.
Често постављана питања
П # 1) Како функционише спавање нити у Јави?
Одговор: Када се слееп () позове на нити са наведеном количином времена у милисекундама, нит престаје са својим извршавањем. Одустаје од ЦПУ-а. Дакле, током трајања када нит спава, остале нити могу да користе ЦПУ.
П # 2) Шта је ииелд () и слееп () у нити Јава?
Одговор: Метода навоја слееп () доводи до тога да се нит одрекне ЦПУ-а и заустави извршавање. Док ова нит спава, остале нити добијају ЦПУ. То ради роковник.
Метода ииелд () такође доводи до тога да нит одустане од контроле ЦПУ-а када је позвана, али метода слееп () показује одлучније понашање у поређењу са ииелд ().
П # 3) Како спречити да Јава нит пређе у стање спавања?
Одговор: Заустављамо Јава нит да спава методом интеррупт (). Било која нит која чека или спава може се прекинути позивањем методе интеррупт () класе Тхреад.
П # 4) Можемо ли убити нит у Јави?
Одговор: Не, нит није убијена у Јави. Уместо тога, нит је заустављена у Јави. Нит је прекинут, а затим се може елегантно искључити. Често користимо испарљиво логичко поље које се периодично проверава да ли има промена у вредностима, како бисмо могли да прекинемо нит.
П # 5) Зашто је спавање () статична метода?
Одговор: Када позивамо методу слееп () за успављивање нити, увек је зовемо помоћу класе Тхреад.
На пример , Тхреад.слееп (1000);
Горњи позив функционише у контексту тренутне нити и ставља тренутну нит у стање мировања. Никада не позивамо методу користећи одређену инстанцу нити. Стога је метода статична.
откривање цурења меморије ц ++
Закључак
У овом упутству смо разговарали о методи слееп () нити у Јави. Метода спавања () доводи до тога да тренутна нит која се извршава престаје са извршењем на одређено време које је дато као аргумент за методу спавања.
Планер система ради са методом спавања како би тренутну нит ставио у стање чекања. Док конац спава, и даље поседује браве или мониторе које је стекао. Када негативну вредност времена спавања пренесемо на метод спавања, он баца „ИллегалАргументЕкцептион“.
Када проследимо важећу вредност времена спавања методи слееп (), остале нити ће се извршавати док тренутна нит спава.
=> Овде погледајте како бисте овде видели А-З Јава Водича за обуку.
Препоручено читање
- Мултитхреадинг у Јави - Водич са примерима
- Мултитхреадинг у Ц ++ са примерима
- Јава Синцхронизед: Шта је синхронизација нити у Јави
- Јава теме са методама и животним циклусом
- Јава Стринг Водич | Јава стринг методе са примерима
- Како се користи Јава тоСтринг метод?
- ТрееМап у Јави - Водич за примере Јава ТрееМап
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича