الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لمحة جافاوية 60: الخيوط الخفية

بدأه علاء الصالحي في 6 يناير 2010 · 15 رد · 1,527 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انقل لكم هذه اللمحة من مدونتي

كيف حالكم يا شباب

من فترة بسيطة استوقفني أخ وأنا ذاهب للفطور في الجامعة

وفاجأني بقوله علاء الأدبية

طالعت في وجهه وأنا مستغرب

ما الذي يعنيه هذا؟

فقال لي هل أنت صاحب مدونة علاء الأدبية

بأمانة استغربت الموضوع

لم أكن أتوقع أن هناك من يقرأ لي

على كل يبدو لي هذا جيداً

في الماضي كنت أكتب لأتذكر ما أكتبه

يبدو أن الوضع تغير

(أشك أن هذا الأخ متخلف عقلياً)

يا عبده احترم الناس

ألا يكفيك أن تشتم واحد فقط

(أنا فعلياً أشتمك أنت لأني أقصد أن الأخ متخلف عقلياً لكي يقرأ لك)

جيد بما أنك موجود هنا فأنت متخلف أيضاً

طااااااااااااااااخ

(أنا هنا لأني مجبر على الوجود هنا)

ومن ذا الذي أجبرك يا فالح

على العموم اتركوكم من عبده ومهاترته التي لا تنتهي

وأعتذر للأخ على وقاحة عبده معه

طاااااااااااااااااااخ

أقصد على الخطأ الغير مقصود من الأخ عبده

(ايوه اعدل يا دب)

المهم اليوم سأكلمكم عن شيء بسيط

اليوم سنكلمكم عن الخيوط الخفية daemon threads

الخيط الخفية هي عبارة عن خيط عادي

لكنه يحتوي على ميزة تميزه عن باقي الخيوط

ألا وهي لا يعمل منفرداً

ستقولون وما الميزة في هذا

هذه النوعية من الخيوط تعمل على توفير خدمة service ما للخيوط الأخرى

وفي حالة عدم وجود خيوط أخرى في البرنامج فإن هذه النوعية من الخيوط تموت تلقائياً

مثال بسيط

برنامج يقوم بعملية ضرب المصفوفات

البرنامج يتكون من خيط رئيسي يسمى Main thread

هذا الخيط مسؤول عن البرنامج والعمليات الرئيسية فيه

وخيط آخر مسؤول عن عملية ضرب المصفوفات

وبعد الانتهاء من عملية الضرب يخبر الخيط الرئيسي بأن العملية انتهت

حينها يقوم الخيط بعرض المعلومات التي توصل لها الخيط الآخر

ما الذي يحصل لو أغلقنا البرنامج

بمعنى آخر أغلقنا الخيط الرئيسي

سيبقى الخيط الآخر يعمل في حساب المصفوفة

لو فرضنا أنا نقوم بضرب مصفوفة كبيرة

فإن الوقت سيكون كبيراً

لهذا جافا تقدم مفهوم الخيوط الخفية

هذه الخيوط لا تعمل لوحدها

بمعنى آخر لو لم يتبقى في البرنامج سوى هذه النوعية من الخيوط

فإن هذه الخيوط تموت من تلقاء نفسها

وهذه ميزة كبيرة جداً

على العموم جربوا البرنامج التالي وأخبروني رأيكم

package daemon_thread;

public class MainThread {
	public static void main(String[] args) {
		DaemonThread daemonThread=new DaemonThread();
		Thread thread=new Thread(daemonThread);
		//thread.setDaemon(true);
		thread.start();
		for (int i = 0; i < 10; i++) {
			System.out.println("main thread");
		}
	}

}

package daemon_thread;

public class DaemonThread implements Runnable{

	public void run() {
		while (true) {
			System.out.println("daemon thread");
		}

	}

}

ملاحظة:بالمناسبة المؤقتات تستخدم مفهوم الخيط الخفي

صحيح نسيت أن أخبركم

أن المثال السابق فقط يحتاج إلى تفعيل السطر التالي

//thread.setDaemon(true);

لتروا الفرق ما بين الخيط العادي والخيط الحفي

أتمنى أن تكونوا حصلتوا على بعض الفائدة

تحياتي

أحب أن أنسب الفضل إلى أصحابه

هذه اللمحة مستقاة من رد للأخ عيسى في منتدى الفريق العربي للبرمجة

لا أذكر متى بالضبط لكني قرأتها قديماً جداً

وأتمنى إن كان عيسى يرى هذه المقالة أن يطمني على حاله

2
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#2

السلام عليكم

هل الخط هو ال thread??

شكرا مقدما

00020309t.gif

1958_1963.gif
#3

صحيح

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#4

حسب علمي ان ال Timers هي Daemon Threads

شكرا لك على المثال

#5

هل معنى

while(true)

هو "كرر مدى الحياة" ام انه "كرر طالما ان ال thread ليس في حالة توقف"

اجبني ضروري جزاك الله كل خير

تم تعديل هذه المشاركة بواسطة sameh mahmoud في 7 يناير 2010 في 04:22

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#6

@ Mohammed Mshari Ersan

يبدو أنك لم تقرأ المقالة كاملة يا محمد

وهذا أمر يعاقب عليه القانون :lol:

وهذا اقتباس من المقالة :)

اقتباس

ملاحظة:بالمناسبة المؤقتات تستخدم مفهوم الخيط الخفي

@ sameh mahmoud

عندما نقول while ونعطيها الشرط true

فهذا معناه كرر إلى الأبد

في وضع الخيط العادي الأمر غير محبذ

بإمكانك الإطلاع على لمحة جافاوية 9: كيف توقف خيوطك بأمان

لكن الخيوط الخفية لا تعمل لوحدها

لا مشكلة لو جعلتها تعمل للأبد

لأن فعلياً جافا ستتولى مهمة إيقافها عند إنتهاء البرنامج كله

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7

السلام عليكم اخى الكريم

ال thread هل تعتقد ان تعلمها يكون للمبتدئين ام عندما نصل لمستوى معين فى الجافا

اعتقد انه يوجد فصل فى كتاب how to program فى الجافا يتحدث عن هذا الموضوع

اريد ان اعرف فقط متى سأستخدم هذا فى مشروعى مثلا؟؟

00020309t.gif

1958_1963.gif
#8

الخيوط من المواضيع المتقدمة في كل لغات البرمجة

وهذا لا لشيء وإنما لأن مفهوم البرمجة متعددة المهام multitask computation

من المفهايم المتقدمة جداً في البرمجة

في الأغلب البرامج التي تعتمد على النظم الموزعة والبرامج التي لها متطلبات خاصة يكون مفهوم الخيوط فيها مفهوماً أساسياً

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

شكرا لك اخى الكريم على التوضيح

00020309t.gif

1958_1963.gif
#10

السلام عليكم،

بالنسبة للمثال المقدم من طرف الأخ علاء ، هو يحتوي على ثلاث خيوط اثنان Non Daemon وواحد daemon وهوالمتغير thread في المثال.

يمكن تقليص العدد إلى اثنان فقط كمايلي:

 public class DaemonThread extends Thread{

	public void run() {
		while (true) {
			System.out.println("daemon thread");
		}

	}}

public class Main {

    public static void main(String[] args) {
       DaemonThread daemonThread=new DaemonThread();

                daemonThread.setDaemon(true);
                daemonThread.start();

		for (int i = 0; i < 10; i++) {
			System.out.println("main thread");
		}

    }

}

في انتظار الردودد..

#11

لاحظ في المثال أن علاء عمل implements ل Runnable وليس extends ل Thread. وال constructor الخاص ب Thread ينتظر كائن يعمل implements ل Runnable. لذلك أظن أن العدد هو إثنان فقط.

أظن أنك قمت بالتفريق بين daemonThread و thread، لكنها يمثلان Thread واحد، لأن الطريقة run التي عرفناها في DeamonThread هي التي ينادي عليها thread.

لكن ننتظر علاء للتأكد.

تم تعديل هذه المشاركة بواسطة herch في 22 يناير 2010 في 02:27

#12

صحيح يا عصام Runnable لا يعني وجود خيط thread جديد

كل ما يعنيه أن لدينا مشروع خيط لكن متى يولد هذا الخيط

في لحظة إسناد الكائن من Runnable إلى صانع الكائنات الخاص بـ thread

ننتظر لنعرف وجهة نظر الأخت

ربما يكون هناك شيء أغفلته أنا وعصام

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#13

انشاء a Thread يكون عن طريق Runnable implements أو extends Thread فكلاهما صحيح ، ويفي لنا بغرض جعل الخيط Daemon و بصراحة لا أعلم اماكن اختيار الطريقة الأولى من الثانية.والتغيير الذي قمت به كان لجعل خيط daemon واحد بارز "من وجهة نضري".لنعلم أين هو الخيط NON daemon الذي سيوقف تنفيذ البرنامج بالكامل.

فما هو ال NON Daemon Thread في المثال؟

#14
اقتباس

البرنامج يتكون من خيط رئيسي يسمى Main thread

هذا الخيط مسؤول عن البرنامج والعمليات الرئيسية فيه

وخيط آخر مسؤول عن عملية ضرب المصفوفات

في كل برامج جافا الدالة main عندما تنفذ تنفذ في خيط Thread

يسمى هذا الخيط بالخيط الرئيسي Main Thread

على العموم الخيط الرئيسي دائماً ما يكون غير خفي non daemon

الخيوط الأخرى تكون خيوط غير خفية في الأساس

لو أردت تغيير حالة الخيط إلى خيط خفي

فيجب عليك استخدام الدالة

setdaemon

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#15

لقد اتضح الأمر، شكرا على الشرح

تحياتـــــنا

#16

على الرحب والسعة أختي

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…