PDA

View Full Version : مقاله: Thread در جاوا (قسمت سوم:ایجاد ترد با استفاده از واسط Runnable)



manvaputra
شنبه 30 شهریور 1387, 22:08 عصر
پیش نیاز:


Thread در جاوا (قسمت اول:مفاهیم اولیه Thread) (http://barnamenevis.org/forum/showthread.php?t=123116)
Thread در جاوا (قسمت دوم:ایجاد ترد با استفاده از روش بسط کلاس Thread) (http://barnamenevis.org/forum/showthread.php?t=123261)


ایجاد ترد با استفاده از واسط Runnable:

(Implementing the Runnable Interface)



در این روش کلاسی را با قابیلیت پیاده سازی و اسط Runnable ایجاد می کنیم سپس با ارسال نام کلاس(به عنوان آرگومان) به سازنده کلاس Thread ترد جدید را ایجاد می کنیم. دو سازنده زیر اجازه این کار را به ما می دهند:




Thread (Runnable <object>)
Thread (Runnable <object>, String<name>)
متد دوم به ما اجازه انتخاب نام دلخواه برای ترد را نیز می دهد این مورد مشابه همان چیزی است که در آموزش قبلی توضیح داده شد. تنها نکته مهم در بدست آوردن نام ترد می باشد در نوع بسط از کلاس Thread به راحتی و با استفاده از متد getName() نام ترد بدست می آمد ولی در روش استفاده از واسط Runnable چون ترد های ایجاد شده مستقیما بسطی از کلاس ترد نیستند پس به طور مستقیم نمیتوانند از متدهای این کلاس مانند همین getName() استفاده نمایند در این حالت می بایست از متد currentThread کمک بگیریم:




Thread.currentThread().getName();




مثال:
این مثال دقیقا همان مثال sample1 از آموزش قسمت دوم می باشد که اینبار با متد Runnable پیاده سازی شده است.


public class sample2 implements Runnable
{
public static void main(String[] args)
{
Thread thread1 =new Thread(new sample2());
Thread thread2 =new Thread(new sample2());
thread1.start();
thread2.start();
}

public void run()
{
for (int i=0; i<10; i++)
{
System.out.println(Thread.currentThread().getName( )+ " being executed.");

}
}
}

تجزیه و تحلیل خروجی مثال بالا دقیقا مشابه sample1 میباشد. در مثال بالا چنانچه توجه کرده باشید کلاس برنامه اصلی برای ایجاد ترد استفاده شده است باید توجه داشته باشید که این تنها راه نیست یعنی شما می توانید با استفاده از یک کلاس دلخواه در متن برنامه اصلی نیز این مراحل را ایجاد کنید. برای روشن شدن موضوع به مثال زیر توجه نمایید :




public class sample3 {
static Thread thread1, thread2;

public static void main(String[] args) throws Exception {

thread1 = new Thread(new mymain());
thread2 = new Thread(new mymain());

thread1.start();
thread2.start();
}
}

class mymain implements Runnable
{
public void run()
{
for (int i=0; i<10; i++)
{
System.out.println(Thread.currentThread().getName( )+ " being executed.");
}
}
}

در مثال بالا تردهای thread1 و tread2 از کلاس خود برنامه یعنی کلاس sample3 ایجاد نشده اند بلکه آرگومان ساخت آنها کلاسی است با نام mymain که آن را تعریف نموده ایم بدیهی است عبارت implements Runnable نیز در جلوی همین کلاس باید نوشته شود نه در جلوی کلاس sample3 .

ادامه دارد..... (http://barnamenevis.org/forum/showthread.php?p=604205#post604205)