مشخصات مقاله
-
1494
-
0.0
-
8661
-
0
-
0
آموزش Java – ایجاد Thread در Java
آموزش Java – ایجاد Thread در Java
در جاوا thread را می توان به دو روش ایجاد کرد:
- ارث بری از کلاس Thread
- پیاده سازی interface ای به نام Runnable
ایجاد thread با ارث بری از کلاس Thread
کلاس Thread توابع سازنده (Constructor) و متدهایی را در اختیار توسعه دهنده قرار می دهد که به واسطه ی آن ها می توان thread ایجاد کرده و عملیاتی را بر روی آن thread اجرا کرد. کلاس Thread از کلاس پایه ی Object ارث بری داشته و interface ای به نام Runnable را پیاده سازی می کند.
توابع سازنده ی (Constructor) پرکاربرد کلاس Thread
- Thread()
- Thread(String name)
- Thread (Runnable r)
- Thread (Runnable r, String name)
متدهای پرکاربرد کلاس Thread
- public void run(): نقطه ی شروع اجرای thread می باشد. اجرای thread از این متد آغاز می شود.
- public void start(): اجرای thread را آغاز می کند. پس از فراخوانی این متد، JVM متد run() را در سطح کلاس Thread صدا می زند.
- public void sleep (long miliseconds): سبب می شود thread ای که در زمان حاضر در حال اجرا به تعداد میلی ثانیه های مشخص به طور موقت، متوقف شود.
- public void join(): منتظر می ماند تا thread جاری از حافظه پاک شده و از بین برود.
- public void join(long miliseconds): حداکثر تعداد میلی ثانیه های مشخصی صبر می کند تا thread جاری از بین برود.
- public int getPriority(): مقدار اولویت اجرا (priority) مربوط به thread جاری را برمی گرداند.
- public int setPriority(int priority): مقدار اولویت اجرا thread را تغییر می دهد.
- public String getName(): اسم thread جاری را برمی گرداند.
- public void setName(String name): اسم thread جاری را تغییر می دهد.
- public Thread currentThread(): متغیری از جنس thread جاری (اشاره گر به thread جاری) را برمی گرداند.
- public int getId(): شناسه ی منحصر بفرد و متناظر thread که در زمان ایجاد به آن تخصیص یافته را برمی گرداند.
- public Thread.State getState(): وضعیتی که thread جاری در آن قرار دارد را به عنوان خروجی برمی گرداند.
- public Boolean IsAlive(): بررسی می کند آیا thread مورد نظر در حافظه موجود (alive) بوده یا خیر.
- public void yield(): فراخوانی این متد سبب می شود آبجکت یا نمونه thread ای که در زمان حاضر در حال اجرا است به طور موقت متوقف شده و به سایر thread ها فرصت اجرا داده شود.
- public void suspend(): thread را به حالت تعلیق در می آورد (منسوخ).
- public void resume(): با فراخوانی این متد thread ای که به وسیله ی متد suspend() به حالت تعلیق درآمده، کار خود را ادامه می دهد(منسوخ).
- public void stop(): آبجکت thread جاری را متوقف می کند (منسوخ).
- public Boolean IsDaemon(): بررسی می کند آیا thread جاری، یک thread پردازش عملیات پس زمنیه ای/از نوع daemonهست یا خیر.
- public void setDaemon(boolean b): مشخص می کند thread مورد نظر بایستی یک user thread باشد یا daemon thread.
- public void interrupt(): thread جاری را متوقف می کند.
- public boolean isInterrupted(): بررسی می کند آیا thread متوقف شده است یا خیر.
- public static boolean interrupted(): بررسی می کند آیا thread جاری متوقف شده است یا خیر.
پیاده سازی Runnable
همان طور که قبلا گفته شد، یک روش برای ایجاد thread، تعریف یک کلاس است که اینترفیس Runnable را پیاده سازی می کند. کلاس نام برده متد run()از interface مذکور را در بدنه ی خود پیاده سازی می کند. سپس یک نمونه از کلاس مورد نظر ساخته شده و به عنوان آرگومان به هنگام ایجاد (new کردن) Thread به تابع Thread ارسال شده و (توسط متد start) راه اندازی می گردد.
هر کلاسی که قرار است نمونه ی ساخته شده از روی آن توسط thread اجرا شود، بایستی اینترفیس Runnable را پیاده سازی نماید. این interface یک متد به نام run() دارد.
- public void run(): یک thread را اجرا و عملیات درون آن را راه اندازی می کند.
راه اندازی یک thread جدید با متد start()
متد start() از کلاس Thread یک نمونه ی جدید از thread را که در حافظه ایجاد شده، راه اندازی می کند. این متد عملیات زیر را اجرا می کند:
- • یک thread (همراه با callstack یا پشته ی فراخوانی متدها در حافظه ی stack) جدید آغاز می شود.
- • thread از حالت New به Runnable تغییر وضعیت می دهد.
- • زمانی که thread فرصت مناسب را بدست می آورد، اجرا شده و متد run() متناظر آن که نقطه ی شروع برنامه می باشد، اجرا می شود.
مثال کابردی از ایجاد Thread با ارث بری از کلاس Thread
class Multi extends Thread{
public void run(){
System.out.println("thread is running...");
}
public static void main(String args[]){
Multi t1=new Multi();
t1.start();
}
}
خروجی:
thread is running...
مثال کاربردی از ایجاد Thread جدید با پیاده سازی اینترفیس Runnable
class Multi3 implements Runnable{
public void run(){
System.out.println("thread is running...");
}
public static void main(String args[]){
Multi3 m1=new Multi3();
Thread t1 =new Thread(m1);
t1.start();
}
}
خروجی:
thread is running...
اگر از کلاس Thread ارث بری نکنید، آنگاه آبجکتی که از روی کلاس مورد نظر ایجاد می کنید یک آبجکت از جنس thread محسوب نمی شود. به همین جهت لازم است به صورت صریح یک آبجکت از جنس کلاس Thread ایجاد نمایید. در مثال بالا، همان طور که می بینید، آّبجکت کلاس m1 از نوع کلاس Multi3 که Runnable را پیاده سازی کرده، به عنوان آرگومان به دستور new Thread(m1) ارسال شده تا متد run() از کلاس مزبور اجرا شود.