java, جاوا, همزمانی در جاوا (MultiThreading)

Thread در جاوا (MultiThreading in Java)

Thread در جاوا

در این آموزش، تیم کدگیت را با آموزش Thread در جاوا همراهی کنید. این آموزش نیاز به آشنایی با تعاریف مقدماتی جاوا وجود دارد. تعاریفی مانند:

  1. آشنایی با شی گرایی
  2. متد
  3. ارث بری
  4. Inner class

مقدمه

خیلی خوب می شد ما فقط روی یک مسئله تمرکز کنیم و تمام حواس خود را روی آن قرار دهیم در این صورت به بهترین نحو ممکن آن کار را انجام میدادیم ولی این مسئله بسیار سخت است. بدن انسان در هر لحظه فعالیت های مختلفی را انجام میدهد مانند گوش دادن و چشیدن و حتی دیدن و خیلی از فعالیت های دیگر که ما آن را نمیبینیم مثل پمپاژ خون و …

کامپیوتر نیز میتواند چند عملیات را همزمان انجام دهد امروزه بسیار عادی هست که شما در حال گوش دادن به آهنگ، یک email را دریافت و پیغام آن را در صفحه ببینید.یا در حال کپی کردن فایل، فیلم هم ببینید!!!!!!

Multi Thread

کمتر پیش آمده در نرم افزارهای جدید از همزمانی(Multi Threading) استفاده نشود. بسیاری از نرم افزارهای امروزه از همزمانی استفاده میکنند که باعث سرعت در کار ما می شود. با پیشرفت سخت افزار ها امکان همزمانی بیشتر از قبل شده است. به طور کلی همزمانی در برنامه بدین معناست که برنامه شامل دو یا چند قسمت است که همزمان اجرا می شوند و هر قسمت فرآیند متفاوتی را اجرا می کنند.

وقتی  که چند فرآیند منبع یا منابعی را به اشتراک میگذارند مانند CPU، چند وظیفه ای (multi tasking) میگویند. Multi threading ایده multi tasking را درون برنامه ها گسترده کرده است به طوری که شما توانایی تقسیم یک عملیات به یک یا چندین thread مجزا را دارید.هر کدام از این  thread ها میتوانند به صورت همزمان اجرا شوند.

چرخه حیات Thread

یک Thread در چرخه حیات خود وضعیت های مختلفی را دارد مانند:

  • New: در این وضعیت Thread چرخه حیات خود را آغاز میکند.تا زمانی که شروع به کار نکرده Thread در همین وضعیت باقی خواهد ماند.
  • Runnable: بعد از زمان کوتاهی Thread تازه ساخته شده، وارد این وضعیت شده است. در این وضعیت thread را در حال اجرا یک فرآیند در نطر میگیرند.
  • Waiting: گاهی اوقات یک thread منتظر تمام شدن یک thread دیگر است در این حالت thread در وضعیت waiting قرار دارد. بعد از اتمام انتظار (وقتی thread دوم تمام شد) وضعیت thread به Runnable می رود.
  • Dead: وقتی فرآیند تمام شود Thread به وضعیت Dead میرود.
  • Running: وضعیت اجرا یک Thread

پیاده سازی thread در جاوا

حال نوبت به پیاده سازی thread در جاوا رسیده است.در جاوا میتوان به طرق مختلفی thread را پیاده سازی کرد:

  1. از طریق implement کردن Runnable
  2. از طریق extend کردن کلاس thread
  3. ساختن کلاس بی نام با استفاده از Runnable

از طریق implement کردن Runnable

ابتدا یک کلاس به نام Runner می سازیم. بعد کلاس را implements میکنیم به Runnable . وقتی implement به Runnable میکنیم باید متد به نام Run را در کلاس خود پیاده سازی کنیم.این متد وقتی Thread شروع میشود صدا زده میشود.(وضعیت Running). در متد Run ما یک کد ساده میزنیم که hello و شماره آن را چاپ کند.

class Runner implements Runnable{

     public void run() {
          for (int i = 0; i < 10; i++) {

              System.out.println("hello "+ i);
              try {
                   Thread.sleep(100);
              } catch (InterruptedException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
              }
          }

     }

}

کد main به صورت زیر است. از کلاس Thread یک Object میسازیم.کلاس Thread در constructor خود یک Runnable میگیرد و ما در ورودی Runner خود را می سازیم.

 public static void main(String[] args) {
          Thread th1 = new Thread(new Runner());
          Thread th2 = new Thread(new Runner());

          th1.start();
          th2.start();

     }

از طریق extend کردن کلاس thread

یک کلاس به Runner میسازیم(مثل قبل). حالا کلاس خود را extends میکنیم به Thread. مانند قبل متد Run  می نویسیم.

class Runner extends Thread{

     public void run() {
          for (int i = 0; i < 10; i++) {

              System.out.println("hello "+ i);
              try {
                   Thread.sleep(100);
              } catch (InterruptedException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
              }
          }

     }

}

کد main به صورت زیر است. از کلاس Runner یک Object میسازیم. خود Runner یک Thread است پس فقط نیاز به start کردن thread داریم.

public static void main(String[] args) {

          Runner runner1 = new Runner();
          Runner runner2 = new Runner();

          runner1.start();
          runner2.start();

     }

ساختن کلاس بی نام با استفاده از Runnable

در متد main وقتی  از کلاس thread یک object میسازیم درون constructor یک کلاس بی نام میسازیم.این کار را با new کردن از runnable  در constructor انجام میدهیم.

 public static void main(String[] args) {

          Thread th1 = new Thread(new Runnable() {

              public void run() {
                   for (int i = 0; i < 10; i++) {

                        System.out.println("hello " + i);
                        try {
                             Thread.sleep(100);
                        } catch (InterruptedException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                        }
                   }

              }
          });

          th1.start();

     }

نوشته های مشابه

1 دیدگاه در “Thread در جاوا (MultiThreading in Java)

  1. کتایون گفت:

    خیلی ساده و سودمند توضیح دادید. سایتتون خیلی برای من مفید بود. سپاسگذارم و موفق باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *