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

آموزش Java – استفاده از تابع/Shutdown hook در Java

آموزش Java – استفاده از تابع/Shutdown hook در Java

گاهی لازم می شود در صورت بسته شدن برنامه به طور ناگهانی (قبل از اینکه برنامه از حافظه پاک شود)، عملیات خاصی صورت گیرد. shutdown hook یک تکه کد است که به JVM معرفی و متصل شده و آن را مجبور می کند قبل از اینکه کاملا خاموش شود، عملیات معینی را اجرا کند.

با استفاده از shutdown hook می توان عملیاتی نظیر پاک سازی حافظه، آزاد سازی منابع سیستمی یا ذخیره ی اطلاعات مربوط به وضعیت برنامه را قبل از این که JVM به صورت ناگهانی یا عادی غیرفعال شود، به انجام رساند. منظور از پاک سازی کارهایی نظیر بستن فایل گزارشات (log file)، ارسال پیغام های هشدار به مدیر سیستم و یا هر کار مرتبط دیگری می باشد. به بیان ساده، هر زمان که لازم می دانید، پیش از بسته شده JVM عملیات خاصی انجام گیرد، می توانید از shutdown hook استفاده نمایید.

چه زمانی JVM بسته می شود؟


  1. زمانی که کاربر ctrl+c را در پنجره ی فرمان فشار می دهد.
  2. زمانی که System.exit(int) فراخوانی می شود.
  3. زمانی که کاربر logoff کرده و از اپلیکیشن خارج می شود.
  4. کاربر برنامه را می بندد.

متد addShutdownHook(Thread hook)

متد addShutdownHook() از کلاس Runtime به توسعه دهنده امکان می دهد که thread مورد نظر و عملیاتی که قرار است قبل از خاتمه یافتن برنامه اجرا شود، را برای JVM مشخص و معرفی کند.

دستور استفاده از متد:

public void addShutdownHook(Thread hook){}  

برای بدست آوردن آبجکتی از کلاس Runtime می توان متد static factoryای به نام getRuntime() که نمونه ای از جنس کلاس را برمی گرداند، استفاده کرد. برای مثال:

Runtime r = Runtime.getRuntime();

متد factory

متدی که نمونه ای از یک کلاس را برمی گرداند، factory method خوانده می شود.

مثال کاربردی از تابع shutdown hook

class MyThread extends Thread{  
public void run(){  
System.out.println("shut down hook task completed..");  
}  
}  
public class TestShutdown1{  
public static void main(String[] args)throws Exception {  
Runtime r=Runtime.getRuntime();  
r.addShutdownHook(new MyThread());  
System.out.println("Now main sleeping... press ctrl+c to exit");  
try{Thread.sleep(3000);}catch (Exception e) {}  
}  
}  

خروجی:

Now main sleeping... press ctrl+c to exit
       shut down hook task completed..

توجه داشته باشید که با فراخوانی متد halt(int) از کلاس Runtime می توان روند و توالی shutdown را متوقف کرد.

در زیر همان مثال را با کمک کلاس فاقد نام (anonymous) مشاهده می کنید:

public class TestShutdown2{  
public static void main(String[] args)throws Exception {  
Runtime r=Runtime.getRuntime();  
r.addShutdownHook(new Thread(){  
public void run(){  
System.out.println("shut down hook task completed..");  
}  
}  
);  
System.out.println("Now main sleeping... press ctrl+c to exit");  
try{Thread.sleep(3000);}catch (Exception e) {}  
}  
}  

خروجی:

Now main sleeping... press ctrl+c to exit
       shut down hook task completed..
1396/08/19 2830 1250
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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