JavaRush /Java блогу /Random-KY /25-деңгээл. Деңгээлдеги тема боюнча интервью суроолоруна ...
zor07
Деңгээл
Санкт-Петербург

25-деңгээл. Деңгээлдеги тема боюнча интервью суроолоруна жооптор

Группада жарыяланган
25-деңгээл. Деңгээлдин темасы боюнча интервью суроолоруна жооптор - 1
  1. Объекттин бардык абалы кандай Thread?

    • ЖАНЫ
    • RUNNABLE
    • БЛОК КАЛГАН
    • КҮТҮҮДӨ
    • TIMED_WAITING
    • ТОКТОТУЛГАН
  2. Блокко киргенде жип кандай абалдарга бара алат synchronized?

    • RUNNABLE
    • БЛОК КАЛГАН

    RUNNABLEде, белгиленген code блогун synchronizedбашка жип ээлебесе. Болбосо, биздин жип BLOCKED абалын алат жана mutex an objectинин бошотулушун күтөт.

  3. Методду чакырганда жип кандай абалга өтөт wait()?

    Бул ыкманы чакыруу жипти КҮТҮҮ абалына коет.
    Метод учурдагы жип тарабынан "кулпуланган" мутекс an objectиндеги wait()блоктун ичинде гана чакырылышы мүмкүн , антпесе, ыкма IllegalMonitorStateException өзгөчө учурун ыргытат .synchronized

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

    Метод чакырылганда wait(), учурдагы жип an objectтен кулпуну бошотуп , башка жип аркылуу monitorметоддун чакырылышын күтүп, КҮТҮҮ абалына кирет . Бул болоору менен жип ойгонот жана монитор бош эмес болсо, аны кармап, ишин улантат. Эгерде мониторду башка жип ээлеп турган болсо, учурдагы жип БЛОК КАЛГАН абалга өтөт.monitor.notify()monitor.notifyAll()

  4. Методду чакырганда жип кандай абалга өтөт wait(500)?

    Бул ыкманы чакыруу жипти TIMED_WAITING абалына коет.
    Методдун аналогиясы боюнча wait(), аны учурдагы жип менен "кулпуланган (кулпуланган)" мутекс an objectисинде wait(timeout)блоктун ичинде гана чакырууга болот .synchronized

    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()Объекттеги башка жип менен чакырылган метод monitorжипти КУТУП жаткан абалдан ИШТЕГЕН абалга жылдырат, эгерде монитор an objectисин башка жип басып албаса, антпесе БЛОК КАЛГАН абалга.

  5. Методду чакырганда жип кандай абалга өтөт notifyAll()?

    notifyAll()бардык жиптер "калышат". Бардык "уктап жаткан" (КҮТҮҮ) жиптердин бири RUNNABLE абалына кирип, колдонулуп жаткан an objectтин мониторун өзүнө алат жана ишин улантат. Калгандары БЛОК КАЛГАН абалда болот. Биринчи "ойгонуу" жип башкалар күтүп жаткан мониторду бошотоор замат, анын тагдыры кийинки жип менен кайталанат (өзүм билемдик жип БӨЛӨГӨН абалдан ИШТЕГЕН абалга өтөт). Бул бардык "ойгонгон" жиптер БЛОК КАЛГАН абалдан чыкмайынча уланат.

  6. Синхрондоштурулган блоктун үч жиптери wait()мутекс an objectи деп аталат. Төртүнчү жип чакырса, бул жиптер кандай абалга барат notifyAll()?

    Алардын экөө БӨЛӨГӨН абалга, бирөө ИШТЕГЕН абалга өтөт

  7. join(500)Ал эмнеси менен айырмаланат wait(500)?

    Учурдагы жипти TIMED_WAITING абалына өткөрүп бергенине жана өткөрө join(500)турганына карабастан , алардын ортосунда олуттуу айырмачылыктар бар: жипке чакырылган, бул блок синхрондоштурулган 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)бул блок синхрондоштурулган 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