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

متد join در جاوا (MultiThreading in Java)

متد join در جاوا

در این جلسه تیم کدگیت را با آموزش متد join در جاوا همراهی کنید. پیش نیاز این آموزش شامل موارد زیر است:

  1. آشنایی با Thread
  2. آشنایی با شی گرایی
  3. مدیریت استثناها در جاوا
  4. متد در جاوا

Multi Thread

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

متد join در جاوا

در آموزش‌های گذشته در مورد همزمانی و نجوه ایجاد Thread صحبت کردیم. شروع یک Thread دست ما است ولی آیا هنگام تمام شدن Thread از آن با خبر می‌شویم؟! آیا نیاز است متغیری تعریف کنیم تا زمان اتمام Thread را بدانیم؟! جواب استفاده از متد join در جاوا است. هر Thread متدی به نام Join دارد و در صورت صدا زدن آن تا موقعی که Thread تمام نشده است سطر بعدی کد اجرا نخواهد شد.

مثال متد join در جاوا

در این قسمت می‌خواهیم حاصل عبارت ریاضی (1+2)/(1*2) را  به کمک همزمانی محاسبه کنیم. یک کلاس به نام Add داریم که حاصل 1+2 را بدست می‌آورد و کلاس Mul حاصل 1*2 را بدت می‌آورد. کد کلاس‌های گفته شده به صورت زیر است:

class Add extends Thread {
     int value;

     public void run() {
          value = 1 + 2;
     }
}
class Mul extends Thread {
     int value;

     public void run() {
          value = 1 * 2;
     }
}

حال نوبت به نوشتن متد Main است.

تست متد join در جاوا

برای اینکه عبارت ریاضی (1+2)/(1*2) را محاسبه کنیم دو کلاس نوشتیم که از Thread در آنها استفاده شده است. در صورت صدا زدن Thread ها باید منتظر ماند تا هر دو تمام شوند و سپس حاصل عبارت ریاضی را محاسبه کرد (برای محاسبه عبارت ریاضی مورد نظر، باید حاصل هر دو کلاس را بر یکدیگر تقسیم کرد). کد main متد join در جاوا به صورت زیر است:

public static void main(String[] args) {
          Add t1 = new Add();
          Mul t2 = new Mul();

          t1.start();
          t2.start();

          try {
              t1.join();
              t2.join();
          } catch (InterruptedException e) {
              e.printStackTrace();
          }

          double n = ((double) t2.value / t1.value);

          System.out.println(n);
     }

همانطور که می‌بینید، Thread ها را اجرا و بعد با صدا زدن متد join آنها منتظر تمام شدن آنها شدیم سپس حاصل هر دو کلاس را تقسیم کرده و عبارت (1+2)/(1*2) را محاسبه کردیم.

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

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

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