ما معنى Daemon thread وما هي استخدماته ارجو المساعدة
ما معنى Daemon thread وما هي استخدماته
هو Thread عادي ولكن بفرق بسيط هو ان ال JVM سوف تنهى كل ال Daemon Threads عندما ينتهي عمل البرنامج ولن يتم انتظارها. بعكس ال Threads العادية فالبرنامج لن ينتهي طالما هناك Thread يعمل.
طبعاً انتهاء البرنامج ليس متعلقاً بالدالة الرئيسية main وانما بعدد ال Thread فيه، فالبرامج الكونسول تنتهي لأن هناك Thread واحد وينتهي لذلك ينتهي البرنامج، لكن مثلاً في ال GUI Application سوف يكون هناك أكثر من Thread أخر يعمل لذلك لن ينتهى البرنامج بعد انتهاء الدالة الرئيسية main وانتهاء ال main thread.
هذا النوع غالباً ما يستخدم للقيام باشياء متعلقة في البرنامج نفسه ولا تتطلب معرفة او انتظار المستخدم (مثل ال Daemon Process في لينوكس حيث هي مهام في الخلفية لا يعلم عنها المستخدم)، لذلك لا تضع شيء مهماً مثلاً نتيجة حساب عملية يحتاجها المستخدم في ملف باستخدام Daemon Thread حيث يمكن ان يتم انهائها قبل اتمام العملية وتخرب البيانات.
من الاستخدامات المناسبة:
استخدامها لارسال او استقبال رسائل من السيرفر للتأكد من هل هناك تحديث او نسخة جديدة، فلا تريد المستخدم بعد اغلاق البرنامج أن ينتظر الى ان يتم التاكد من هذا الامر، بل يتم الاغلاق مباشرة.
في جافا تستخدم بواسطة ال Garbage Collector والذي يقوم بازالة الكائنات في الذاكرة التي لم تعد مستخدمة، فأيضاً المستخدم لا يريد ان ينتظر ان ينهى ال Garbage Collector عمله بعد انهائه للبرنامج ويريد انهائه مباشرة.
في برامج ال GUI اذا قمت بكتابة عملية تأخذ وقتاً فسوف يهنق ال UI لديك لأن ال Thread الخاص بالUI اصبح مشغولاً بتلك العملية، لذلك يجب نقل تلك العملية الطويلة الى Thread أخر ، وبما ان ال Thread الأخر هو ثريد عادي فيجب ان يتم التعامل مع ال UI بشكل صحيح وارسال اي تغييرات على ال UI في ال EDT. الشاهد في الأمر أن بعض انواع ال Threads التي تتعامل بشكل صحيحاً مع ال EDT مثلاً SwingWorker هي ايضاً deamon Threads ويتم انهائها اذا لم يكن هناك normal threads في حال انتهى اخر ثريد عادي.
التعليقات