JavaRush /وبلاگ جاوا /Random-FA /سطح 25. پاسخ به سوالات مصاحبه در مورد سطح
zor07
مرحله
Санкт-Петербург

سطح 25. پاسخ به سوالات مصاحبه در مورد سطح

در گروه منتشر شد
سطح 25. پاسخ به سوالات مصاحبه با موضوع سطح - 1
  1. همه حالات جسم چیست Thread؟

    • جدید
    • قابل اجرا
    • مسدود
    • در انتظار
    • TIMED_WAITING
    • خاتمه یافت
  2. یک نخ در هنگام ورود به یک بلوک به چه حالت هایی می تواند برود synchronized؟

    • قابل اجرا
    • مسدود

    در RUNNABLE، اگر بلوک کد علامت گذاری شده synchronizedتوسط رشته دیگری اشغال نشده باشد. در غیر این صورت، موضوع ما حالت BLOCKED را دریافت می کند و منتظر می ماند تا شی mutex آزاد شود.

  3. موضوع هنگام فراخوانی متد به چه وضعیتی می رسد wait()؟

    فراخوانی این متد، رشته را در حالت WAITING قرار می دهد.
    این متد را wait()فقط می توان در داخل یک بلوک روی یک شی mutex فراخوانی کرد synchronizedکه توسط رشته فعلی "قفل" شده است، در غیر این صورت متد یک استثنا IllegalMonitorStateException ایجاد می کند .

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

    هنگامی که یک متد فراخوانی می شود wait()، رشته فعلی قفل را از شی آزاد می کند monitorو وارد حالت WAITING می شود و منتظر می ماند تا متد monitor.notify()توسط monitor.notifyAll()رشته دیگری فراخوانی شود. به محض اینکه این اتفاق بیفتد نخ بیدار می شود و اگر مانیتور مشغول نبود آن را گرفته و به کار خود ادامه می دهد.
    اگر مانیتور توسط نخ دیگری اشغال شود، رشته فعلی به حالت BLOCKED می رود.

  4. موضوع هنگام فراخوانی متد به چه وضعیتی می رسد wait(500)؟

    فراخوانی این روش، رشته را در وضعیت TIMED_WAITING قرار می دهد.
    بر اساس قیاس با روش wait()، wait(timeout)می توان آن را فقط در داخل یک بلوک روی یک شی mutex فراخوانی کرد synchronizedکه توسط رشته فعلی "قفل (قفل شده)" شده است.

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

    هنگام فراخوانی متد wait()، نخ فعلی قفل را از جسم آزاد می کند monitorو به مدت 500 میلی ثانیه به حالت خواب می رود. شی monitorممکن است توسط نخ دیگری گرفته شود.
    بعد از 500 میلی ثانیه نخ بیدار می شود و اگر monitorمشغول نبود آن را گرفته و به کار خود ادامه می دهد.
    اگر مانیتور توسط نخ دیگری اشغال شود، رشته فعلی به حالت BLOCKED می رود.

    موضوع هنگام فراخوانی متد به چه وضعیتی می رسد notify()؟

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

    پس از monitor.wait()، موضوع به حالت WAITING می رود. روشی notify()که توسط نخ دیگری بر روی یک شیء فراخوانی می شود monitor، رشته را از حالت WAITING به حالت RUNNABLE منتقل می کند، مگر اینکه شی مانیتور توسط رشته دیگری گرفته شود، در غیر این صورت به حالت BLOCKED.

  5. موضوع هنگام فراخوانی متد به چه وضعیتی می رسد notifyAll()؟

    notifyAll()"می ماند" همه موضوعات. یکی از تمام رشته های "خواب" (WAITING) به حالت RUNNABLE می رود، مانیتور شی مورد استفاده را در اختیار می گیرد و به کار خود ادامه می دهد. بقیه در حالت BLOCKED خواهند بود. به محض اینکه اولین رشته "بیدار شدن" مانیتور را آزاد کند، که همه منتظر آن هستند، سرنوشت آن توسط رشته بعدی تکرار می شود (یک رشته دلخواه از حالت BLOCKED به حالت RUNNABLE می رود). این کار تا زمانی ادامه می‌یابد که همه رشته‌های «بیدارشده» از حالت BLOCKED خارج شوند.

  6. سه رشته در بلوک هماهنگ شده به نام wait()شی mutex. اگر موضوع چهارم تماس بگیرد، این رشته ها به چه وضعیتی می رسند notifyAll()؟

    دو تا از آنها به حالت BLOCKED، یکی به حالت RUNNABLE می روند

  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()، رشته فعلی "نوبت خود را می گذرد" و جاوا بلافاصله به اجرای رشته بعدی سوئیچ می کند. موضوع از حالتی runningبه حالت دیگر می رود ready. حالت‌های در حال اجرا و آماده، فرعی‌های حالت RUNNABLE هستند.

PS نظرات، اضافات، اصلاحات، نکات قابل قبول است =)
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION