-
همه حالات جسم چیست
Thread
؟- جدید
- قابل اجرا
- مسدود
- در انتظار
- TIMED_WAITING
- خاتمه یافت
-
یک نخ در هنگام ورود به یک بلوک به چه حالت هایی می تواند برود
synchronized
؟- قابل اجرا
- مسدود
در RUNNABLE، اگر بلوک کد علامت گذاری شده
synchronized
توسط رشته دیگری اشغال نشده باشد. در غیر این صورت، موضوع ما حالت BLOCKED را دریافت می کند و منتظر می ماند تا شی mutex آزاد شود. - موضوع هنگام فراخوانی متد به چه وضعیتی می رسد
wait()
؟فراخوانی این متد، رشته را در حالت WAITING قرار می دهد.
این متد راwait()
فقط می توان در داخل یک بلوک روی یک شی mutex فراخوانی کردsynchronized
که توسط رشته فعلی "قفل" شده است، در غیر این صورت متد یک استثنا IllegalMonitorStateException ایجاد می کند .Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
هنگامی که یک متد فراخوانی می شودwait()
، رشته فعلی قفل را از شی آزاد می کندmonitor
و وارد حالت WAITING می شود و منتظر می ماند تا متدmonitor.notify()
توسطmonitor.notifyAll()
رشته دیگری فراخوانی شود. به محض اینکه این اتفاق بیفتد نخ بیدار می شود و اگر مانیتور مشغول نبود آن را گرفته و به کار خود ادامه می دهد.
اگر مانیتور توسط نخ دیگری اشغال شود، رشته فعلی به حالت BLOCKED می رود. -
موضوع هنگام فراخوانی متد به چه وضعیتی می رسد
فراخوانی این روش، رشته را در وضعیت TIMED_WAITING قرار می دهد.wait(500)
؟
بر اساس قیاس با روش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. -
موضوع هنگام فراخوانی متد به چه وضعیتی می رسد
notifyAll()
؟notifyAll()
"می ماند" همه موضوعات. یکی از تمام رشته های "خواب" (WAITING) به حالت RUNNABLE می رود، مانیتور شی مورد استفاده را در اختیار می گیرد و به کار خود ادامه می دهد. بقیه در حالت BLOCKED خواهند بود. به محض اینکه اولین رشته "بیدار شدن" مانیتور را آزاد کند، که همه منتظر آن هستند، سرنوشت آن توسط رشته بعدی تکرار می شود (یک رشته دلخواه از حالت BLOCKED به حالت RUNNABLE می رود). این کار تا زمانی ادامه مییابد که همه رشتههای «بیدارشده» از حالت BLOCKED خارج شوند. -
سه رشته در بلوک هماهنگ شده به نام
دو تا از آنها به حالت BLOCKED، یکی به حالت RUNNABLE می روندwait()
شی mutex. اگر موضوع چهارم تماس بگیرد، این رشته ها به چه وضعیتی می رسندnotifyAll()
؟ -
علیرغم این واقعیت که و رشته فعلی را به حالت TIMED_WAITING منتقلjoin(500)
با چه فرقی داردwait(500)
؟join(500)
می کند ، تفاوت های قابل توجهی بین آنها وجود دارد: در یک رشته نامیده می شود، در داخل یک بلوک همگام شده روی شی ای که این بلوک روی آن همگام شده است فراخوانی می شود. وقتی فراخوانی می شود، رشته فعلی 500 میلی ثانیه برای رشته ای که متد آن برای تکمیل فراخوانی شده است، منتظر می ماند. در صورت فراخوانی، رشته فعلی قفل را از شی همگام شده رها می کند و به مدت 500 میلی ثانیه به حالت خواب می رود. پس از 500 میلی ثانیه، در هر دو مورد، نخ ها به کار خود ادامه می دهند.wait(500)
join(500)
wait(500)
join(500)
join()
wait(500)
-
wait(500)
با چه فرقی داردsleep(500)
؟sleep(500)
در یک رشته فراخوانی می شود،wait(500)
که در داخل یک بلوک همگام سازی شده روی شیئی که این بلوک روی آن همگام شده است فراخوانی می شود.
در صورت فراخوانی،sleep(500)
موضوع فعلی 500 میلی ثانیه منتظر می ماند و سپس به کار خود ادامه می دهد.
در صورت فراخوانی،wait(500)
رشته فعلی قفل را از شی همگام شده رها می کند و به مدت 500 میلی ثانیه به حالت خواب می رود. -
موضوع هنگام فراخوانی متد به چه وضعیتی می رسد
هنگامی که یک متد فراخوانی می شودyield()
؟yield()
، رشته فعلی "نوبت خود را می گذرد" و جاوا بلافاصله به اجرای رشته بعدی سوئیچ می کند. موضوع از حالتیrunning
به حالت دیگر می رودready
. حالتهای در حال اجرا و آماده، فرعیهای حالت RUNNABLE هستند.
GO TO FULL VERSION