JavaRush /Блоги Java /Random-TG /Сатҳи 25. Ҷавобҳо ба саволҳои мусоҳиба дар мавзӯи сатҳ
zor07
Сатҳи
Санкт-Петербург

Сатҳи 25. Ҷавобҳо ба саволҳои мусоҳиба дар мавзӯи сатҳ

Дар гурӯҳ нашр шудааст
Сатҳи 25. Ҷавобҳо ба саволҳои мусоҳиба дар мавзӯи сатҳ - 1
  1. Ҳама ҳолатҳои an object кадомҳоянд Thread?

    • НАВ
    • ДАВОМ ДОРАД
    • БАСТА ШУДААСТ
    • ИНТИЗОР
    • TIMED_WAITING
    • КАТЪ КАРДА ШУД
  2. Ҳангоми ворид шудан ба блок ришта ба кадом ҳолат рафта метавонад synchronized?

    • ДАВОМ ДОРАД
    • БАСТА ШУДААСТ

    Дар RUNNABLE, агар блоки рамзи ишорашударо synchronizedриштаи дигар ишғол накунад. Дар акси ҳол, риштаи мо ҳолати БЛОКшударо мегирад ва мунтазири баровардани an objectи мутекс мешавад.

  3. Ҳангоми даъват кардани усул ришта ба кадом ҳолат мегузарад wait()?

    Даъват кардани ин усул риштаро дар ҳолати ИНТИЗОР ҷойгир мекунад.
    Ин усулро wait()танҳо дар дохor блок дар an objectи мутекс, ки аз ҷониби риштаи ҷорӣ "қуфл" шудааст, даъват кардан мумкин аст , вагарна усул истиснои IllegalMonitorStateExceptionроsynchronized мепартояд .

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

    Вақте ки усул даъват карда мешавад wait(), риштаи ҷорӣ қулфро аз an object раҳо мекунад ва ба ҳолати ИНТИЗОРӢ дохил мешавад ва мунтазири он аст, ки метод бо риштаи дигар monitorдаъват шавад . Ҳамин ки ин рӯй медиҳад, ришта бедор мешавад ва агар монитор банд набошад, онро гирифта корашро идома медиҳад. Агар мониторро риштаи дигар ишғол кунад, риштаи ҷорӣ ба ҳолати Блокшуда мегузарад.monitor.notify()monitor.notifyAll()

  4. Ҳангоми даъват кардани усул ришта ба кадом ҳолат мегузарад wait(500)?

    Даъват кардани ин усул риштаро дар ҳолати TIMED_WAITING мегузорад.
    Дар муқоиса бо усули он wait(), wait(timeout)онро танҳо дар дохor блок synchronizedдар an objectи мутекс, ки аз ҷониби риштаи ҷорӣ "қуфл (қуфл)" шудааст, даъват кардан мумкин аст.

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

    Ҳангоми даъват кардани метод wait(), риштаи ҷорӣ қулфро аз an object мебарорад monitorва барои 500 миллисония ба хоб меравад. Объект monitorметавонад бо риштаи дигар гирифта шавад.
    Пас аз 500 миллисония ришта бедор мешавад ва агар monitorбанд набуд, онро гирифта корашро идома медиҳад.
    Агар мониторро риштаи дигар ишғол кунад, риштаи ҷорӣ ба ҳолати Блокшуда мегузарад.

    Ҳангоми даъват кардани усул ришта ба кадом ҳолат мегузарад notify()?

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

    Пас аз monitor.wait(), ришта ба ҳолати интизорӣ мегузарад. Усуле notify(), ки бо риштаи дигар дар an object даъват шудааст, monitorриштаро аз ҳолати ИНТИЗОРӢ ба ҳолати иҷрошаванда интиқол медиҳад, агар an objectи монитор аз ҷониби риштаи дигар гирифта нашавад, дар акси ҳол ба ҳолати БАСТАШУДА.

  5. Ҳангоми даъват кардани усул ришта ба кадом ҳолат мегузарад notifyAll()?

    notifyAll()хамаи риштахо «мемонанд». Яке аз ҳама риштаҳои "хоб" (ИНТИЗОР) ба ҳолати RNNABLE мегузарад, монитори an objectи истифодашавандаро мегирад ва кори худро идома медиҳад. Қисми боқимонда дар ҳолати Блокшуда хоҳад буд. Ҳамин ки риштаи аввалини «бедоршавӣ» мониторро, ки ҳама интизори он ҳастанд, мебарорад, сарнавишти он бо риштаи навбатӣ такрор мешавад (риштаи худсарона аз ҳолати БАСТАШУДА ба ҳолати ИДОДАшаванда мегузарад). Ин то он даме, ки ҳамаи риштаҳои "бедоршуда" аз ҳолати БАСТАШУДА хориҷ шаванд, идома хоҳад ёфт.

  6. Се ришта дар блоки ҳамоҳангшуда wait()an objectи mutex номида мешавад. Агар риштаи чорум занг занад, ин риштаҳо ба кадом ҳолат мераванд notifyAll()?

    Ду нафари онҳо ба ҳолати БАСТАШУДА, яке ба ҳолати ИДОДАшаванда мегузаранд

  7. join(500)Он аз чӣ фарқ дорад wait(500)?

    Сарфи назар аз он, ки риштаи ҷорӣро ба ҳолати TIMED_WAITING интиқол медиҳад, байни онҳо фарқиятҳои назаррас вуҷуд доранд: join(500)дар ришта даъват карда мешавад, ки дар дохor блоки ҳамоҳангшуда дар an objectе, ки ин блок ҳамоҳанг карда шудааст, даъват карда мешавад. Ҳангоми даъват, риштаи ҷорӣ 500 миллисонияро интизор мешавад, ки риштае, ки усули он барои анҷомёбӣ даъват шудааст. Ҳангоми даъват, риштаи ҷорӣ қулфро аз an objectи ҳамоҳангшуда раҳо мекунад ва барои 500 миллисония ба хоб меравад. Пас аз 500 миллисония, дар ҳарду ҳолат риштаҳо корро идома медиҳанд.wait(500)
    join(500)wait(500)
    join(500)join()
    wait(500)

  8. wait(500)Он аз чӣ фарқ дорад sleep(500)?

    sleep(500)ба ришта даъват карда мешавад, wait(500)дар дохor блоки ҳамоҳангшуда дар an objectе, ки ин блок дар он ҳамоҳанг карда шудааст, даъват карда мешавад.
    Ҳангоми даъват, sleep(500)риштаи ҷорӣ 500 миллисония интизор мешавад ва баъд кори худро идома медиҳад.
    Ҳангоми даъват, wait(500)риштаи ҷорӣ қулфро аз an objectи ҳамоҳангшуда озод мекунад ва барои 500 миллисония ба хоб меравад.

  9. Ҳангоми даъват кардани усул ришта ба кадом ҳолат мегузарад yield()?

    Вақте ки усул даъват карда мешавад yield(), риштаи ҷорӣ "навбати худро мегузаронад" ва java фавран ба иҷрои риштаи навбатӣ мегузарад. Ришта аз давлат runningба давлат мегузарад ready. Ҳолатҳои иҷрошаванда ва омода зердавлатҳои ҳолати RUNNABLE мебошанд.

PS Шарҳҳо, иловаҳо, ислоҳҳо, эродҳо қабул карда мешаванд =)
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION