logo

שרשור Java Daemon

שרשור דמון הוא שרשור רקע בעדיפות נמוכה שאינו מונע מה-JVM לצאת כאשר התוכנית מסיימת להפעיל

  • שרשורי Daemon פועלים ברקע כדי לתמוך באשכולות משתמשים.
  • ה-JVM יוצא אוטומטית כאשר כל שרשורי המשתמש (שאינם דמונים) מסתיימים.
  • הם נוצרים באמצעות אותה מחלקה Thread אך מסומנים כדמון בשיטת setDaemon(true).
  • יש לקרוא למתודה setDaemon(true) לפני שהשרשור מתחיל.
  • דוגמאות נפוצות כוללות אספן זבל וחוט גימור.

תַחבִּיר

Java
thread.setDaemon(true); 

מקרי שימוש

  1. איסוף אשפה: אוסף הזבל (GC) ב-Java פועל כחוט דמון.
  2. ניטור רקע: שרשורי Daemon יכולים לנטר את מצב המשאבים או החיבורים של רכיבי האפליקציה.
  3. שירותי רישום וביקורת: ניתן להשתמש בשרשורי Daemon לרישום פעילויות רקע ברציפות.
  4. פעולות ניקוי: שרשורי Daemon עשויים לנקות מעת לעת קבצים זמניים לשחרר משאבים שאינם בשימוש או לבצע ניקוי מטמון.
  5. משימות מתזמן או טיימר: מתזמני רקע משתמשים לעתים קרובות בפתילים של דמונים כדי להפעיל משימות במרווחי זמן קבועים.

שיטות בשימוש

  • void setDaemon(בוליאני מופעל): מסמן שרשור כדמון או שרשור משתמש. יש לקרוא לפני ההתחלה().
  • boolean isDaemon(): בודק אם שרשור הוא דמון.

יצירת שרשור Daemon

Java
public class DaemonExample extends Thread {  public void run() {  if (Thread.currentThread().isDaemon()) {  System.out.println('Daemon thread running...');  } else {  System.out.println('User thread running...');  }  }  public static void main(String[] args) {  DaemonExample t1 = new DaemonExample();  DaemonExample t2 = new DaemonExample();  t1.setDaemon(true); // must be set before start()  t1.start();  t2.start();  } } 

תְפוּקָה
Daemon thread running... User thread running... 

התנהגות של Daemon Thread

Java
public class DaemonBehavior extends Thread {  public void run() {  while (true) {  System.out.println('Daemon thread running...');  }  }  public static void main(String[] args) {  DaemonBehavior t = new DaemonBehavior();  t.setDaemon(true);  t.start();  System.out.println('Main (user) thread ends...');  } } 

תְפוּקָה
Main (user) thread ends... 

ה-JVM מסתיים מיד לאחר סיום השרשור הראשי למרות שרשור הדמון עדיין פועל.

הערות חשובות

  • שרשור יורש את סטטוס הדמון של השרשור שיוצר אותו.
  • השיטה setDaemon(true) זורקת את IllegalThreadStateException אם נקראת לאחר start().
  • אין להשתמש בשרשורי Daemon עבור משימות הדורשות השלמה כגון כתיבה לקובץ או עדכון מסד נתונים.
  • JVM מפסיק את כל שרשורי הדמון בפתאומיות מבלי לבצע פעולות ניקוי.

ההבדל בין חוט משתמש לשרשור Daemon

בָּסִיסשרשור משתמשחוט דימון
מַטָרָהמבצע משימות יישום עיקריותמבצע שירותי רקע
מחזור חייםשומר על JVM בחיים עד לסיוםמסתיים כאשר כל שרשורי המשתמש מסתיימים
עֲדִיפוּתבדרך כלל גבוה יותרבדרך כלל נמוך יותר
יציאת JVMJVM מחכה להשלמהJVM יוצא גם אם פועל
דוגמאותחוטי עובד חוט ראשיצגי רקע של אספן אשפה
צור חידון