ورود

View Full Version : ایجاد یک Thread



Sina.iRoid
شنبه 19 مهر 1393, 12:44 عصر
سلام. این کد هایی است که من نوشتم:

کلاس MyThread:


public class MyThread implements Runnable{

Thread t;

//Constructor
public MyThread() {
//Create a new, second thread
t = new Thread(this, "Demo Thread");
System.out.println("Child thread: " + t);

//Start the thread
t.start();
}

@Override
public void run() {
try {
for (int i = 5; i > 0; i--) {
System.out.println("Child thread: " + i);
Thread.sleep(500);
}
} catch (InterruptedException e) {
System.out.println("Child interrupted.");
}
System.out.println("Exiting Child thread.");
}
}


کلاس اصلی:


public class DriverClass{


public static void main(String[] args) {

new MyThread();

try {
for (int i = 5; i > 0; i--) {
System.out.println("Main thread: " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println("Main interrupted.");
}
System.out.println("Main thread exiting.");
}
}


خروجی برنامه:
Child thread: Thread[Demo Thread,5,main]
Main thread: 5
Child thread: 5
Child thread: 4
Main thread: 4
Child thread: 3
Child thread: 2
Main thread: 3
Child thread: 1
Exiting Child thread.
Main thread: 2
Main thread: 1
Main thread exiting.

دوستان من اصلا متوجه نمیشم که چه طور اجرا میشه. در کلاس Mythread چرا از کانستراکتور و this استفاده کرده؟؟
اگر یه توضیح کمی راجع به این کد بدین ممنون مشم. من تازه این بخش و دارم می خونم درست متوجه نمیشم.
ممنون.

vahid-p
شنبه 19 مهر 1393, 17:59 عصر
اون this یعنی آبجکتی که خودش باشه. یعنی مثلا new MyThread که تو کلاس اولی نوشتی، یه آبجکت میسازه. حالا تو کد خود MyThread میخوای بگی از خودم، خب مینویسی this. چون کلاس MyThread میاد و Runnable رو پیاده سازی میکنه، پس خودش قابلیت این رو داره که به عنوان پارامتر به جای Runnable قرار بگیره. در اصل اینجا ترد t از run کلاس mythread استفاده میکنه.

نمیدونم متوجه شدید یا نه ولی فکر کنم بد توضیح دادم!

در مورد ترتیب اعداد هم اول اینکه ترد ها باید بدونید اجراشون به هم وابسته نیست و یه چیز رندمه. اما زمان تاخیری که گذاشتید باعث شده در یک ثانیه ترد اصلی یک عدد رو بده، ترد فرزند دو عدد.

mohsen12345
یک شنبه 20 مهر 1393, 08:31 صبح
شما دو تا thread همزمان برای اجرا دارید ، یکی کلاسی هست که برای thread تعریف کردید و دومی کلاس اصلی برنامه هست
واسه همون که هر دوتا با هم اجرا می شن این خروجی رو بهتون می ده
خاصیت thread ها برای همزمانی در اجراست ...

cups_of_java
یک شنبه 20 مهر 1393, 09:08 صبح
شما بعد از اینکه یک ترد نی یو میکنی متد استارت اون رو صدا میزنی دیگه. خب وقتی استارت رو صدا میزنی چه کدی باید در اجرای ترد اجرا شه؟ اون کدی که شما توی متد ران ترد نوشتی.
اما تو این مثال متد ران شما توی کلاس خودته و شی تردی که نی یو کردی اون رو نمیتونه پیدا کنه برای همین توی کانستراکتور ترد یه پارامتر گذاشتن از نوع ران ایبل که شما داری اون شی ای که متد ران پیاده سازی کرده رو به ترد خودت پاس میکنی. اون شی هم که اینجا اسمش دیس هستش خب