JavaRush /Java блогы /Random-KK /Деңгей 25. Деңгейлік тақырып бойынша сұхбат сұрақтарына ж...
zor07
Деңгей
Санкт-Петербург

Деңгей 25. Деңгейлік тақырып бойынша сұхбат сұрақтарына жауаптар

Топта жарияланған
25-деңгей. Деңгей тақырыбы бойынша сұхбат сұрақтарына жауаптар – 1
  1. Объектінің барлық күйлері қандай Thread?

    • ЖАҢА
    • ЖҮРГІЗУГЕ БОЛАДЫ
    • БӨЛІМДЕЛГЕН
    • КҮТУ
    • TIMED_WAITING
    • ТОҚТАЛДЫ
  2. Блокқа кірген кезде жіп қандай күйлерге бара алады synchronized?

    • ЖҮРГІЗУГЕ БОЛАДЫ
    • БӨЛІМДЕЛГЕН

    RUNNABLE ішінде, белгіленген code блогы synchronizedбасқа ағынмен қамтылмаса. Әйтпесе, біздің ағын BLOCKED күйін алады және мутекс нысанының шығарылуын күтеді.

  3. Әдісті шақырған кезде ағын қандай күйге өтеді wait()?

    Бұл әдісті шақыру ағынды КҮТУ күйіне қояды.
    Әдіс тек ағымдағы ағынмен «құлыпталған» мутекс нысанындағы wait()блок ішінде шақырылуы мүмкін , әйтпесе әдіс IllegalMonitorStateException ерекше жағдайын шығарады .synchronized

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait();}

    Әдіс шақырылғанда wait(), ағымдағы ағын нысаннан құлыпты босатады және әдісті басқа ағынмен monitorшақыруын күтіп, КҮТУ күйіне өтеді . Бұл орын алғаннан кейін жіп оянады және монитор бос болмаса, оны ұстап алып, жұмысын жалғастырады. Мониторды басқа ағын алып жатса, ағымдағы ағын БЛОКАЛАНҒАН күйге өтеді.monitor.notify()monitor.notifyAll()

  4. Әдісті шақырған кезде ағын қандай күйге өтеді wait(500)?

    Бұл әдісті шақыру ағынды TIMED_WAITING күйіне қояды.
    Әдісімен ұқсастығы бойынша wait()оны тек ағымдағы ағынмен «құлыпталған (құлыпталған)» мутекс нысанындағы wait(timeout)блок ішінде шақыруға болады .synchronized

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait(500);}

    Әдісті шақырған кезде wait()ағымдағы ағын нысаннан құлыпты босатады monitorжәне 500 миллисекунд бойы ұйқы режиміне өтеді. Нысан monitorбасқа ағынмен түсірілуі мүмкін.
    500 миллисекундтан кейін жіп оянады және егер monitorол бос болмаса, оны ұстап алып, жұмысын жалғастырады.
    Мониторды басқа ағын алып жатса, ағымдағы ағын БЛОКАЛАНҒАН күйге өтеді.

    Әдісті шақырған кезде ағын қандай күйге өтеді notify()?

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait();}

    -дан кейін monitor.wait()ағын КҮТУ күйіне өтеді. notify()Нысандағы басқа ағынмен шақырылған әдіс ағынды monitorКҮТУ күйінен ОРЫНДАУ КҮЙІНЕ, егер монитор нысаны басқа ағынмен түсірілмейінше, басқа жағдайда БӨЛІМДЕЛГЕН күйге жылжытады.

  5. Әдісті шақырған кезде ағын қандай күйге өтеді notifyAll()?

    notifyAll()барлық жіптерді «қалады». Барлық «ұйықтау» (КҮТУ) ағындарының бірі ОРЫНДАЛУҒА БОЛАДЫ күйге өтіп, пайдаланылатын нысанның мониторын қабылдап, жұмысын жалғастырады. Қалғаны БӨЛЕКТЕЛГЕН күйде болады. Бірінші «ояту» ағыны барлығы күткен мониторды босатқаннан кейін оның тағдыры келесі ағынмен қайталанады (еркін ағын БӨЛІМДЕРДІК күйден ОРЫНДАЛУҒА БОЛАДЫ күйге өтеді). Бұл барлық «оянған» ағындар БӨЛІМДЕЛГЕН күйден шыққанша жалғасады.

  6. Синхрондалған блоктағы үш ағын wait()mutex нысаны деп аталады. Төртінші ағын шақырса, бұл ағындар қандай күйге өтеді notifyAll()?

    Олардың екеуі БӨЛІМДЕЛГЕН күйге, біреуі ЖҮРГІЗУГЕ БОЛАДЫ күйге өтеді

  7. join(500)Оның айырмашылығы неде wait(500)?

    Ағымдағы ағынды TIMED_WAITING күйіне көшіретініне қарамастан, олардың арасында айтарлықтай айырмашылықтар бар: join(500)ағында шақырылған , осы блок синхрондалған нысандағы синхрондалған блок ішінде шақырылған. Шақырылған кезде ағымдағы ағын әдісі аяқталу үшін шақырылған ағын үшін 500 миллисекунд күтеді. Шақырылған кезде ағымдағы ағын синхрондалған нысаннан құлыпты босатады және 500 миллисекунд бойы ұйқы режиміне өтеді. 500 миллисекундтан кейін екі жағдайда да ағындар жұмысын жалғастырады.wait(500)
    join(500)wait(500)
    join(500)join()
    wait(500)

  8. wait(500)Оның айырмашылығы неде sleep(500)?

    sleep(500)ағында шақырылады, wait(500)осы блок синхрондалған нысандағы синхрондалған блоктың ішінде шақырылады.
    Шақырылған кезде sleep(500)ағымдағы ағын 500 миллисекунд күтеді, содан кейін жұмысын жалғастырады.
    Шақырылған кезде wait(500)ағымдағы ағын синхрондалған нысаннан құлыпты босатады және 500 миллисекунд бойы ұйқы режиміне өтеді.

  9. Әдісті шақырған кезде ағын қандай күйге өтеді yield()?

    Әдіс шақырылғанда yield(), ағымдағы ағын «өз кезегін өткізіп жібереді» және java бірден келесі ағынды орындауға ауысады. Жіп күйден күйге runningөтеді ready. Іске қосулы және дайын күйлер - ЖҰМЫС АБАЛЫ күйінің қосалқы күйлері.

PS Түсініктемелер, толықтырулар, түзетулер, ескертулер қабылданады =)
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION