تفاوت کلیدی – خواب در مقابل انتظار در جاوا
Sleep و انتظار دو روشی هستند که برای multithreading در جاوا استفاده می شوند. متد خواب متعلق به کلاس Thread است در حالی که متد انتظار از کلاس Object است. تفاوت کلیدی بین خواب و انتظار در جاوا این است که خواب برای تعلیق اجرای رشته فعلی برای تعداد میلی ثانیه مشخص استفاده می شود در حالی که از روش انتظار استفاده می شود تا رشته فعلی منتظر بماند تا رشته دیگری اعلان یا فراخوانی کند. متد notifyAll برای شیء.
نخ کوچکترین واحد پردازش در سیستم عامل است. این یک جریان متوالی واحد از کنترل در یک برنامه است.نخ ها سبک هستند. Multithreading مکانیسم اجرای همزمان چند رشته است. زبان های برنامه نویسی مانند جاوا از multithreading پشتیبانی می کنند. Multithreading مزایایی دارد زیرا اجازه می دهد تا چندین نخ را به طور همزمان اجرا کنیم و نخ ها مستقل از یکدیگر هستند. روش هایی در جاوا وجود دارد که می توان از آنها برای multithreading استفاده کرد. دو تا از آنها خوابند و منتظرند.
خواب در جاوا چیست؟
در یک سیستم عامل چندین فرآیند در حال اجرا هستند. یک فرآیند یک برنامه در حال اجرا است. هر فرآیند می تواند چندین رشته داشته باشد و یک سوئیچینگ زمینه بین این رشته ها اتفاق می افتد. در جاوا دو راه برای ایجاد یک موضوع وجود دارد. یعنی با گسترش کلاس Thread یا پیاده سازی رابط Runnable. کلاس Thread سازنده و متدهایی برای ایجاد و انجام عملیات روی یک thread دارد. کلاس Thread کلاس Object را گسترش می دهد و رابط Runnable را پیاده سازی می کند. رابط Runnable باید توسط هر کلاسی که نمونههای آن توسط یک رشته اجرا میشوند پیادهسازی شود.زمانی که thread اجرا می شود، کدی که باید اجرا شود در متد run نوشته می شود. رشته ای که باید اجرا شود توسط زمانبندی رشته انتخاب می شود. فقط یک رشته در یک فرآیند اجرا می شود.
یک نخ از چندین مرحله عبور می کند. پس از ایجاد یک شی از کلاس Thread، برنامه نویس می تواند متد start را فراخوانی کند. قبل از فراخوانی آن روش، گفته می شود که thread در حالت جدید است. زمانبندی رشته موضوعی را برای اجرا انتخاب میکند. اگر thread هنوز توسط زمانبندی thread انتخاب نشده باشد، اما اگر روش start فراخوانی شده باشد، آنگاه موضوع در حالت runnable قرار دارد. پس از اینکه زمانبندی رشته موضوعی را برای اجرا انتخاب کرد، به حالت در حال اجرا منتقل میشود. اگر موضوع زنده است اما در حال حاضر واجد شرایط اجرای آن نیست، در حالت غیرقابل اجرا یا مسدود است. پس از اتمام روش اجرا، نخ به حالت خاتمه می رود. اینها مراحل اصلی چرخه عمر نخ هستند.
روش های مختلفی در کلاس thread برای انجام وظایف مختلف وجود دارد.روش خواب برای مدت زمان مشخصی از روش خواب استفاده می شود. نحو برای روش خواب عبارت است از خواب خالی عمومی (میلی ثانیه طولانی) InterruptedException را پرتاب می کند. باعث میشود تا رشته در حال اجرا بهمدت چند میلیثانیه، اجرای موقت را متوقف کند. اگر رشته دیگری رشته فعلی را قطع کند، وضعیت قطع شده رشته فعلی با پرتاب این استثنا پاک می شود.
شکل 01: برنامه جاوا با روش خواب
طبق برنامه بالا، متد run حاوی کدهایی است که باید اجرا شوند. در برنامه اصلی دو شی از ExampleThread1 ایجاد می شود و متدهای start بر روی آنها فراخوانی می شوند. این اجازه می دهد تا کد را در روش اجرا اجرا کنید. فقط یک رشته در یک زمان اجرا می شود. با موضوع.خواب (1000); به اولین رشته اجازه می دهد تا اجرا را برای 1000 میلی ثانیه خاتمه دهد. هنگامی که یک رشته در حالت خواب است، زمانبندی رشته رشته دیگر را انتخاب میکند.
انتظار در جاوا چیست؟
چند رشته ممکن است به یک منبع مشترک دسترسی داشته باشند. می تواند باعث تولید خروجی نادرست شود. از همگام سازی رشته می توان برای ایجاد تنها یک رشته برای دسترسی به منبع مشترک استفاده کرد. وضعیتی را به صورت زیر فرض کنید. اگر دو رشته به عنوان t1 و t2 وجود داشته باشد، t1 شروع به ذخیره مقادیر در یک فایل متنی به نام Text1.txt می کند. هنگامی که t1 برمی گردد، از این مقادیر برای برخی از محاسبات دیگر استفاده می شود. اگر t2 قبل از بازگشت t1 شروع شود، t2 می تواند مقادیر ذخیره شده توسط t1 را تغییر دهد. این می تواند باعث شود t1 یک خروجی اشتباه ارائه دهد. با کمک همگام سازی، زمانی که t1 شروع به استفاده از فایل Text1.txt می کند، آن فایل را می توان قفل کرد، بنابراین فقط توسط t1 قابل دسترسی است. تا زمانی که t1 قفل دسترسی به آن فایل متنی را آزاد نکند، t2 نمی تواند آن را تغییر دهد. هنگامی که کار تکمیل شد، t1 می تواند قفل را آزاد کند. این قفل به عنوان مانیتور نیز شناخته می شود.
همگامسازی رشتهها را میتوان با ارتباط بین رشتهای به دست آورد. بخش بحرانی یک بخش کد است که به منابع مشترک دسترسی دارد. در ارتباط بین رشتهای، یک رشته در حال اجرا در بخش بحرانی خود متوقف میشود و یک رشته دیگر مجاز است در همان بخش بحرانی وارد شود تا اجرا شود. با استفاده از روشهای انتظار، اعلان و اطلاعرسانی به همه اجرا میشود. آنها متعلق به کلاس Object هستند. روش انتظار برای اجازه دادن به رشته فعلی برای آزاد کردن قفل استفاده میشود و منتظر میماند تا رشته دیگری متد notify یا notifyAll را برای شیء فراخوانی کند. روش اطلاع رسانی برای بیدار کردن یک رشته که در انتظار قفل است استفاده می شود. notifyAll همه رشتههایی را که روی قفل منتظر هستند بیدار میکند.
شکل 02: کلاس ماشین حساب
شکل 03: روش اصلی
کلاس Calculator Thread را گسترش می دهد. بلوک همگام شده در روش اجرا قرار دارد. روش حلقه for و notify داخل بلوک همگام شده است. در داخل متد اصلی، یک نمونه از یک thread ایجاد می شود و متد start روی آن نمونه فراخوانی می شود. روش اصلی منتظر می ماند تا موضوع اعلان بدهد. در هنگام اجرای برنامه، متد main تا اجرای کامل متد run منتظر می ماند و منتظر متد notify می ماند. هنگامی که متد notify فراخوانی می شود، متد اصلی از انتظار می ایستد و شروع به اجرای بقیه کد می کند. Main منتظر است تا موضوع ماشین حساب تکمیل شود. در نهایت، نتیجه حاصل از جمع چاپ می شود.
اگر بلوک همگامسازی نشده باشد و اگر متد اصلی دارای کدی مانند زیر باشد، خروجی را صفر میکند زیرا منتظر تکمیل رشته دیگر نیست.
Calculator t1=ماشین حساب جدید ();
t1. شروع ();
System.out.println (t1.sum);
شباهت بین خواب و انتظار در جاوا چیست؟
هم خواب و هم انتظار روش هایی هستند که می توان هنگام پیاده سازی چند رشته ای در جاوا استفاده کرد
تفاوت بین خواب و انتظار در جاوا چیست؟
خواب در مقابل انتظار در جاوا |
|
روش خواب باعث میشود که رشته فعلی اجرا را برای تعداد میلیثانیه مشخص به حالت تعلیق درآورد، مشروط به دقت و صحت تایمرها و زمانبندیهای سیستم. | روش انتظار باعث می شود تا رشته فعلی منتظر بماند تا رشته دیگری متد notify یا notifyAll را برای شیء فراخوانی کند. |
ارتباط با قفل | |
روش خواب قفل یک شی را در حین همگامسازی آزاد نمیکند. | روش انتظار قفل را در حین همگامسازی آزاد میکند. |
روش اجرا | |
روش خواب بر روی رشته فعلی اجرا می شود. | روش انتظار روی شی فراخوانی می شود. |
کلاس مرتبط | |
خواب روشی از کلاس Thread است. | انتظار یک متد از کلاس Object است. |
تکمیل | |
فرایند خواب پس از اتمام مدت زمان مشخص شده تکمیل می شود. | روش انتظار با فراخوانی notify یا notifyAll همه روشها قطع میشود. |
خلاصه - خواب در مقابل انتظار در جاوا
بر روی سیستم عامل چندین فرآیند در حال اجراست. هر فرآیند می تواند چندین رشته داشته باشد. thread کوچکترین واحد پردازش در یک سیستم عامل است. زبان برنامه نویسی جاوا از multithreading پشتیبانی می کند. این اجازه می دهد تا چندین رشته را به طور همزمان اجرا کنید. خواب و انتظار دو روشی هستند که می توان در اجرای چند رشته ای استفاده کرد. تفاوت خواب و انتظار در جاوا این است که خواب برای تعلیق اجرای رشته فعلی برای تعداد میلیثانیه مشخص استفاده میشود در حالی که از روش انتظار استفاده میشود تا رشته فعلی منتظر بماند تا رشته دیگری notify یا notifyAll را فراخوانی کند. روش برای شی.