مشخصات مقاله
-
1412
-
0.0
-
3784
-
0
-
0
آموزش Java – فراخوانی متد run()
آموزش Java – فراخوانی متد run() در Java
آیا می توان به طور مستقیم بجای start()، متد run() را صدا زد؟
پاسخ:
- هر thread در پشته ی فراخوانی (call stack) مجزا (start) راه اندازی می شود.
- زمانی که متد run() را از thread اصلی فراخوانی می کنید، متد run() بجای اینکه وارد call stack دیگری شده (thread دیگری را اجرا کند)، وارد call stack جاری می شود و فراخوانی توابع را از بالای پشته از سر می گیرد و همان thread را اجرا می کند.
class TestCallRun1 extends Thread{ public void run(){ System.out.println("running..."); } public static void main(String args[]){ TestCallRun1 t1=new TestCallRun1(); t1.run();//fine, but does not start a separate call stack } }خروجی:
running...
مثال کاربردی از فراخوانی مستقیم متد run():
class TestCallRun2 extends Thread{
public void run(){
for(int i=1;i< 5;i++){ try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}
System.out.println(i);
}
}
public static void main(String args[]){
TestCallRun2 t1=new TestCallRun2();
TestCallRun2 t2=new TestCallRun2();
t1.run();
t2.run();
}
}
خروجی:
1 2 3 4 5 1 2 3 4 5
همان طور که در برنامه ی بالا مشاهده می کنید، پردازنده از اجرای یک thread به thread دیگری نمی پردازد (context -switching رخ نمی دهد) چرا که t1 و t2 هر یک آبجکت ساده درنظر گرفته شده و نمونه ای از جنس thread (thread object) محسوب نمی شوند.