JavaRush /Blog Java /Random-MS /Aras 25. Jawapan kepada soalan temu bual mengenai topik a...
zor07
Tahap
Санкт-Петербург

Aras 25. Jawapan kepada soalan temu bual mengenai topik aras

Diterbitkan dalam kumpulan
Tahap 25. Jawapan kepada soalan temu bual mengenai topik tahap - 1
  1. Apakah semua keadaan objek Thread?

    • BARU
    • BOLEH LARI
    • TERSEKAT
    • MENUNGGU
    • TIMED_WAITING
    • DITAMATKAN
  2. Apakah keadaan yang boleh dilalui oleh benang apabila memasuki blok synchronized?

    • BOLEH LARI
    • TERSEKAT

    Dalam RUNNABLE, jika blok kod yang ditanda synchronizedtidak diduduki oleh benang lain. Jika tidak, benang kami akan menerima keadaan DISEKAT dan akan menunggu objek mutex dikeluarkan.

  3. Keadaan apakah yang akan dituju oleh benang apabila memanggil kaedah wait()?

    Memanggil kaedah ini meletakkan benang dalam keadaan MENUNGGU.
    Kaedah ini wait()hanya boleh dipanggil di dalam blok synchronizedpada objek mutex yang telah "dikunci" oleh benang semasa, jika tidak kaedah itu akan membuang pengecualian IllegalMonitorStateException .

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

    Apabila kaedah dipanggil wait(), benang semasa melepaskan kunci dari objek monitordan memasuki keadaan MENUNGGU, menunggu kaedah dipanggil monitor.notify()oleh monitor.notifyAll()benang lain. Sebaik sahaja ini berlaku, benang akan terjaga dan jika monitor tidak sibuk, ia akan mengambilnya dan terus bekerja.
    Jika monitor diduduki oleh utas lain, utas semasa akan masuk ke dalam keadaan DISEKAT.

  4. Keadaan apakah yang akan dituju oleh benang apabila memanggil kaedah wait(500)?

    Memanggil kaedah ini meletakkan urutan dalam keadaan TIMED_WAITING.
    Dengan analogi dengan kaedah wait(), wait(timeout)ia hanya boleh dipanggil di dalam blok synchronizedpada objek mutex yang telah "dikunci (dikunci)" oleh benang semasa.

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

    Apabila memanggil kaedah wait(), benang semasa melepaskan kunci daripada objek monitordan tidur selama 500 milisaat. Objek monitormungkin ditangkap oleh benang lain.
    Selepas 500 milisaat, benang akan bangun dan jika monitoria tidak sibuk, ia akan mengambilnya dan terus bekerja.
    Jika monitor diduduki oleh utas lain, utas semasa akan masuk ke dalam keadaan DISEKAT.

    Keadaan apakah yang akan dituju oleh benang apabila memanggil kaedah notify()?

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

    Selepas monitor.wait(), benang akan masuk ke keadaan MENUNGGU. Kaedah notify()yang dipanggil oleh utas lain pada objek monitorakan mengalihkan utas dari keadaan MENUNGGU kepada keadaan RUNNABLE melainkan objek monitor ditangkap oleh utas lain, sebaliknya kepada keadaan DISEKAT.

  5. Keadaan apakah yang akan dituju oleh benang apabila memanggil kaedah notifyAll()?

    notifyAll()"akan kekal" semua benang. Salah satu daripada semua utas "tidur" (MENUNGGU) akan masuk ke keadaan RUNNABLE, mengambil alih monitor objek yang digunakan dan meneruskan kerjanya. Selebihnya akan berada dalam keadaan TERSEKAT. Sebaik sahaja benang "bangun" pertama mengeluarkan monitor, yang ditunggu-tunggu oleh semua orang, nasibnya akan diulangi oleh utas seterusnya (benang sewenang-wenangnya akan pergi dari keadaan DISEKAT kepada keadaan RUNNABLE). Ini akan berterusan sehingga semua rangkaian "terjaga" meninggalkan keadaan DISEKAT.

  6. Tiga utas dalam blok disegerakkan dipanggil wait()objek mutex. Apakah keadaan benang ini jika urutan keempat dipanggil notifyAll()?

    Dua daripadanya akan masuk ke dalam keadaan TERSEKAT, satu ke dalam keadaan RUNNABLE

  7. Bagaimana ia berbeza join(500)daripada wait(500)?

    Walaupun fakta bahawa dan join(500)akan wait(500)memindahkan benang semasa ke keadaan TIMED_WAITING, terdapat perbezaan yang ketara antara mereka:
    join(500)dipanggil pada benang, wait(500)dipanggil di dalam blok disegerakkan pada objek yang blok ini disegerakkan.
    Apabila dipanggil, join(500)utas semasa akan menunggu 500 milisaat untuk utas yang kaedahnya join()dipanggil untuk dilengkapkan.
    Apabila dipanggil, wait(500)benang semasa akan melepaskan kunci daripada objek yang disegerakkan dan tidur selama 500 milisaat.
    Selepas 500 milisaat, dalam kedua-dua kes, benang akan terus berfungsi.

  8. Bagaimana ia berbeza wait(500)daripada sleep(500)?

    sleep(500)dipanggil pada benang, wait(500)dipanggil di dalam blok disegerakkan pada objek yang blok ini disegerakkan.
    Apabila dipanggil, sleep(500)urutan semasa akan menunggu 500 milisaat, kemudian meneruskan kerjanya.
    Apabila dipanggil, wait(500)benang semasa akan melepaskan kunci daripada objek yang disegerakkan dan tidur selama 500 milisaat.

  9. Keadaan apakah yang akan dituju oleh benang apabila memanggil kaedah yield()?

    Apabila kaedah dipanggil yield(), utas semasa "melangkau gilirannya" dan java segera beralih kepada melaksanakan utas seterusnya. Benang pergi dari negeri runningke negeri ready. Keadaan berjalan & sedia adalah substate bagi keadaan RUNNABLE.

PS Komen, penambahan, pembetulan, teguran dialu-alukan =)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION