دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۱۴
  • مهر

جلسه ۳۳ : Multithreading یا چند نخی در جاوا

  • دسته‌بندی‌ها :
جلسه ۳۳ : Multithreading یا چند نخی در جاوا
    • جزئیات
    • نوع محتواآموزش تصویری

      مقدمه

      با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرنو کاربرانی که دوره کامل آموزش برنامه نویسی جاوا را دنبال می کنند. جاوا یک زبان برنامه نویسی چند نخی (Multithreading) است. این بدین معنی است که ما می توانیم یک برنامه چند نخی را با استفاده از Java توسعه دهیم. یک برنامه چند نخی حاوی دو یا چند قسمت است که می توانند همزمان اجرا شوند و هر بخش می تواند همزمان با انجام کارهای متفاوتی از منابع موجود به ویژه هنگامی که کامپیوتر شما چندین پردازنده دارد استفاده کند. قابلیت چند وظیفه ای امکان اجرای پردازش های مختلف در یک زمان روی یک پردازنده را فراهم می کند. قابلیت چند نخی نیز به یک برنامه امکان اجرای چندین موضوع مختلف را می دهد. برای آشنایی بیشتر با قابلیت چند نخی در جاوا در ادامه ی مباحث با ما همراه باشید.

      قابلیت چند نخی در جاوا

      با استفاده از قابلیت چند نخی در جاوا زمان پردازش نه تنها در چندین برنامه بلکه در چنیدن موضوع مختلف تقسیم می شود.

      Multi-threading شما را قادر می سازد که فعالیت های چندگانه را همزمان در یک برنامه انجام می دهید.

      دوره ی اجرای یک thread

      اجرای یک thread در یک چرخه ی مشخص اتفاق افتاده و سپس از بین می رود.

      این چرخه شامل تولد یک thread ، شروع اجرا و در نهایت نابود شدن آن است.

      قابلیت چند نخی در جاوا

      قابلیت چند نخی در جاوا

      تشریح فرآیند چرخه ی یک thread :

      New :

      یک thread جدید چرخه ی خود را از وضعیت new آغاز می کند، و این حالت تا شروع چرخه می ماند.

      Runnable :

      پس از ایجاد یک thread ، این thread وضعیت قابل اجرا پیدا می کند و آماده ی اجراست.

      Waiting :

      گاهی اوقات یک thread برای اتمام thread در حال اجرا، به حالت انتظار یا waiting می رود.

      Timed Waiting :

      برای thread در حال انتظار یا waiting می توان یک زمان انتظار مشخص کرد.

      (Terminated (Dead:

      یک thread در حال اجرا پس از پایان فرآیند خود موقف می شود.

      اولویت بندی thread

      هر فرآیند thread دارای یک اولویت برای اجراست که به سیستم عامل کمک می کند تشخیص دهد کدام thread حق اجرا دارد.

      اولویت های thread در محدوده ی  MIN_PRIORITY (ثابت از ۱) و MAX_PRIORITY (ثابت از ۱۰) تعیین می شود.

      به طور پیش فرض به هر thread اولویت NORM_PRIORITY (ثابت ۵) داده می شود.

      البته اولویت های thread به طور قطعی ترتیب اجرای thread را تعیین نمی کند بلکه این بیشتر به پلتفرم بستگی دارد.

      ایجاد thread با استفاده از پیاده سازی یک اینترفیس Runnable

      شما می توانید یک کلاس را به عنوان thread با اجرای اینترفیس Runnable اجرا کنید.

      مرحله ۱

      به عنوان اولین قدم، شما باید یک متد () run ارائه شده توسط اینترفیس Runnable را اجرا کنید.

      این متد یک نقطه ورود برای موضوع را فراهم می کند و شما را در این متد کدهای مربوطه را قرار می دهید.

      در زیر به یک دستورالعمل ساده از متد () run اشاره شده است:

      مثال : 

      مرحله ۲

      در مرحله ی دوم، شما یک شی thread را با استفاده از سازنده زیر ایجاد می کنید:

      مثال : 

      threadObj نمونه ای از یک کلاس است که اینترفیس Runnable را اجرا می کند و threadName نامی است که به موضوع جدید داده شده است.

      مرحله ۳

      هنگامی که یک شی thread ایجاد می شود، می توانید آن را با فراخوانی () method اجرا کنید.

      کد زیر ساختار ساده ی فراخوانی متد () start را نشان می دهد:

      مثال : 

      مثال:

      برنامه ی زیر یک thread جدید را ایجاد کرده و شورع به اجرای آن می کند:

      مثال : 

      نتیجه ی اجرای برنامه ی فوق به صورت زیر خواهد بود:

      مثال : 

      ایجاد یک Thread با گسترش کلاس Thread

      راه  حل دوم برای ایجاد یک thread ایجاد یک کلاس جدید است که کلاس Thread را با استفاده از دو مرحله ساده زیر گسترش می دهد

      این روش انعطاف پذیری بهتری را در برخورد با چند thread ایجاد شده با استفاده از متدهای موجود در کلاس Thread ایجاد می کند.

      مرحله ۱

      شما باید از متد () run در کلاس Thread استفاده کنید.

      این متد یک نقطه ورود برای Thread را فراهم می کند.

      در زیر یک دستورالعمل ساده از دستور () run ارائه شده است:

      مثال : 

      مرحله ۲

      هنگامی که یک شی Thread ایجاد می شود، می توانید آن را با فراخوانی متد ()start ، اجرا کنید که این متد ( ) run را اجرا می کند.

      در زیر به یک دستورالعمل ساده از متد ()start اشاره شده است :

      مثال : 

      مثال – برای نمونه در این مثال برنامه قبلی را با این روش ارائه می دهیم:

      مثال : 

      با اجرای کد فوق در جاوا نتیجه ی زیر را دریافت می کنید:

      مثال : 

      متدهای Thread

      در زیر لیستی از متدهای مهم موجود در کلاس Thread ارائه شده است:

      ردیف

      متد و توضیحات مربوطه

      ۱public void start()

      Thread را در مسیر جداگانه شروع کرده و سپس متد () run را بر روی این Thread تکرار می کند.

      ۲public void run()

      اگر شیء Thread برا هدف جداگانه ای Runnable شده باشد، متد () run در آن شیء Runnable را فراخوانی می کند.

      ۳public final void setName(String name)

      نام شی Thread را تغییر می دهد. همچنین متد () getName نیز برای بازیابی نام در دسترس است.

      ۴public final void setPriority(int priority)

      اولویت Thread جاری را تعیین می کند. مقادیر اولویت بندی بین ۱ تا ۱۰ است.

      ۵public final void setDaemon(boolean on)

      یک پارامتر Thread را به عنوان daemon thread تعریف می کند.

      ۶public final void join(long millisec)

      Thread فعلی این متد را بر روی یک Thread دوم پیوند می دهد و موجب مسدود شدن جریان فعلی تا پایان اجرای دومی یا تعداد مشخصی از میلی ثانیه می شود.

      ۷public void interrupt()

      این متد اجرای Thread را متوقف می کند.

      ۸public final boolean isAlive()

      اگر thread تازه ایجاد شده یا هنوز در حال اجراست و نابود نشده True را بر می گرداند.

      متد های قبلی بر روی یک شی thread خاص فراخوانی می شوند.

      متد های زیر در کلاس Thread استاتیک هستند. با استفاده از یکی از متد های استاتیک عملیات مربوط به موضوع در حال اجرا انجام می شود.

      ردیف

      متد و توضیحات مربوطه

      ۱public static void yield()

      باعث می شود که Thread فعلی در حال اجرا برای هر Thread دیگری از همان اولویت که انتظار می رود برنامه ریزی شود.

      ۲public static void sleep(long millisec)

      باعث می شود که Thread فعلی در حال اجرا برای حداقل تعداد مشخصی از میلی ثانیه باشد.

      ۳public static boolean holdsLock(Object x)

      اگر Thread فعلی قفل در Object داده شده درست شود، True را برمی گرداند.

      ۴public static Thread currentThread()

      یک مرجع را برای thread در حال اجرا بر می گرداند.

      ۵public static void dumpStack()

      ردیابی پشته را برای thread در حال اجرا ممکن می سازد که این حالت برای اشکال زدایی مناسب است.

      مثال – برنامه ThreadClassDemo زیر برخی از این متدهای کلاس Thread را نشان می دهد.

      یک کلاس DisplayMessage را اجرا کنید که Runnable را اجرا می کند:

      مثال : 

      در زیر به کلاس دیگری اشاره شده که کلاس Thread را گسترش می دهد:

      مثال : 

      در زیر برنامه اصلی ما است که از کلاسهای تعریف شده ی فوق استفاده می کند:

      مثال : 

      کد فوق نتیجه ی زیر را در جاوا تولید می کند و هر بار که برنامه ی فوق را اجرا کنید نتیجه ی متفاوتی را دریافت خواهید کرد:

      مثال : 

      کلام آخر

      در این بخش برای دستیابی به قابلیت اجرای هم زمان چند موضوع مختلف با یک برنامه که به قابلیت چند نخی شناخته می شود ، ما مباحث آشنایی با قابلیت چند نخی در جاوا را ارائه کردیم. در بخش بعدی به آشنایی با مفاهیم Applet در جاوا می پردازیم.

      QR:  جلسه ۳۳ : Multithreading یا چند نخی در جاوا
      به اشتراک بگذارید


      دیدگاه کاربران
      1. تصویر کاربر
      2. تصویر کاربر