کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش 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...
آموزش Java

مثال کاربردی از فراخوانی مستقیم متد 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) محسوب نمی شوند.

1396/08/05 3785 1412
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...