در این جلسه تیم کدگیت را با آموزش متد join در جاوا همراهی کنید. پیش نیاز این آموزش شامل موارد زیر است:
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) را محاسبه کردیم.