#C کلید ورود به بازار کار

دوره پروژه‌محور #C و ASP.NET Core

C#
C#
مقالات برنامه نویسی
آموزش 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) محسوب نمی شوند.

مقاله قبلی
آموزش Java – آیا می توان یک Thread را دوبار راه اندازی کرد
مقاله بعدی
آموزش Java – کار با متد join() در پردازش موازی
نظرات شما

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