PDA

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



manvaputra
جمعه 29 شهریور 1387, 03:28 صبح
پیش نیاز:

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



ایجاد ترد با استفاده از روش بسط کلاس Thread :


(Extending the Thread Class)



کلاس Thread هفت سازنده دارد که عمومی ترین آنها عبارتند از:


Thread()
Thread(String <name>)
در حالت اول سیستم به طور خودکار اسمی را با فرمت Thread-n برای ترد ایجاد شده در نظر می گیرد که n عددیست صحیح که از صفر شروع می شود و با ساخت هر ترد جدید اضافه می شود به عنوان مثال اگر با این روش سه ترد ایجاد کنیم نام آنها به ترتیب برابر Thread-0 و Thread-1 و Thread-2 می شود.
با استفاده از سازنده دوم می توان نامی را توسط آرگومان String <name> برای ترد در نظر گرفت.
در هر دو صورت متد getName() نام تردی که ساخته ایم را بر می گرداند. به مثال های زیر توجه کنید:



Thread firstThread = new Thread ();-------------------- > ایجاد ترد با متد اول
Thread secondThread = new Thread ("mythread");--------- >ایجاد ترد با متد دوم

System.out.println (firstThread.getName ());----------- >Thread-0 خروجی
System.out.println (secondThread.getName ());---------- > mythread خروجی


توجه باشید که نام ترد (mythread) با نامی که آدرس ترد را در خود دارد (secondThread) با یکدیگر تفاوت دارند.


متدهای مربوط به ترد:
در ادامه به بررسی تعدادی از متدها ی اصلی و پر کاربرد در رابطه با تردها می پردازیم.

متد Start :
با صدا زدن این متد به صورت خودکار متد Run صدا زده میشود . بخش Run مهمترین قسمت از استفاده ترد می باشد در واقع در این قسمت تمامی عملیاتی که قرار است توسط ترد ایجاد شده انجام شود معرفی می شود در واقع نسبت run به ترد مانند نسبت main می باشد به کل برنامه به این صورت که هر آنچه در main می نویسیم قرار است در کل برنامه اجرا شود و به همان نسبت هر آنچه را که در run می نویسیم قرار است در ترد اجرا شود.


Public void run ()
{
کد های مربوط به ترد
{


در ادامه با یک مثال ساده مفاهیم بالا کاملا پیاده سازی شده است:


public class sample1 extends Thread
{
public static void main (String[] args)
{
sample1 thread1, thread2;
thread1 = new sample1 ();
thread2 = new sample1 ();
thread1.start(); //---->run اجرای خودکار بخش
thread2.start();
}

public void run()//-- > نوشتن کدهای مربوط به ترد
{
for (int i=0; i<10; i++)
{

System.out.println(getName()+" being executed.");

}
}
}

در مثال بالا کلاس اصلی برنامه sample1 نام دارد که کلمه کلیدی extends Thread در جلوی آن نشان دهنده این است که معرفی ترد های ما در این برنامه از نوع بسط کلاس Thread() می باشد. تردهای Thraed1 و Thread2 تردهایی هستند از نوع sample1.
در بخش run وظیفه ترد تعیین شده است یعنی هر ترد هنگامی که اجرا می شود ده بار نام خود را در خروجی چاپ می کند. برنامه با رسیدن به کد thread1=new sample1() ترد شماره یک از نوع sample1 را ایجاد می کند همانطور که قبلا توضیح داده شد سیستم به طور خودکار نام Threda-0 را برای این ترد در نظر می گیرد. با رسیدن به خط thread1.start() ترد اجرا می شود. این مراحل دقیقا برای ترد دوم نیز صورت می پذیرید و هر دو ترد بصوزت همزمان شروع به نمایش اسم خود در خروجی می نمایند.

اجرای این مثال به شما کمک می کند تا با روند سوئیچ شدن تردهای مختلف آشنا شوید بعد از اجرا آنچه در خروجی می بینید مانند زیر می باشد:


Thread-0 being executed.-->0 اجرای ترد
Thread-1 being executed.-->اجرای ترد 1 در این هنگام ترد 0 در حالت انتظار می باشد
Thread-0 being executed.-->اجرای ترد 0 در این هنگام ترد 1 در حالت انتظار می باشد
Thread-1 being executed. "
Thread-0 being executed. "
Thread-1 being executed. "
Thread-0 being executed. "
Thread-1 being executed. "
Thread-0 being executed. "
Thread-1 being executed. "
Thread-0 being executed. "
Thread-1 being executed. "
Thread-0 being executed. "
Thread-1 being executed. "
Thread-0 being executed. "
Thread-1 being executed. "
Thread-0 being executed. "
Thread-1 being executed. "
Thread-0 being executed.-->اجرای ترد 0 در این هنگام ترد 1 در حالت انتظار می باشد
Thread-1 being executed.-->اجرای ترد 1 در این هنگام ترد 0 در حالت انتظار می باشد


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

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