شبكة العريقي للبرمجيات - دروس برمجية - دروس تعليمة - دروس صيانة - تطبيقات برمجية - برامج كمبيوتر - صيانة كمبيوتر - تصميم مواقع انترنت - صيانة منتديات - برامج هواتف ذكية - صيانة هواتف ذكية

الأربعاء، 1 مايو 2013

المهام المتعددة في الجافا

السلام عليكم

1- definition of Thread
2- create Thread
3- start Thread
4- Thread life cycle
5- concurrency between threads
6- synchronized in thread
7- deadlock in threads

الbottom line في الThreads هو :

ليست لديك سلطه على كل شئ ، لابد أن تسلم بأنك لاتستطيع التحكم بكل شئ

Threads is vendor implementation
اي بأنها لم تنشأ بلغة الجافا ، لذلك الجافا لاتصلح لـ real time systems

1- definition of Thread

Ooh ! :lol:
إقتباس
ما هو الــ Thread ؟
الثريد عبارة عن مهمة او وظيفة ممكن ان تعمل مع بعض بالتوازي Parallel
الجافا تستخدم الثريد في مواضع مثل:
1. Garbage collection :
الذي يعمل في الخلفية لتوفير المساحة في الذاكرة.
2.
الاحداث التي تحدث على الـ GUI مسئول عن تجميعها ثريد يعمل في الخلفية

الثريد يظهر وكانه يستخدم الـ Resources الخاصة به مثل CPU,Memory, Registers لكن مع مشاركة المتغيرات .

عادة الثريد يطلق عليه اسم Light Weight Process (LWP) لانه ينفذ مهمة تماما مثل الـ Process ولكن عادة تكون خفيفة


امثلة على استخدام الثريد :
من اوضخ الامثلة متصفح الانترنت نلاحظ مثلا ان المتصفح يحمل اكثر من صورة في نفس الوقت وذلك لان كل ثريد مسئول عن تحميل صورة مختلفة
ايضا نلاحظ ان النص يبدا بالظهور في نفس الوقت الذي تظهر فيه الصور وذلك لان هناك ثريد مسئول عن تحميل و عرض الـ HTML
ايضا تجد هناك تريد مسئول عن المدخلات من المستخدم..
تخيل حياتك من غير ثريد سوف تتطر الى انتظار كل صورة على حدة ثم ظهور النص و هكذا!

الـ JVM (multithreaded ) نفسها تستخدم الثريد فهي تشغل الثريد المسئول عن Garbage collection و ثريد المسئول عن تحديث GUI و ثريد لبرنامجك الذي يعمل تحت JVM



هل تريد مثال ؟

عندما تعمل برنامج عادي بلغة الجافا ، فإن البرنامج يعمل على thread اسمها main ،
class A{ 
        public static void main(String... args){ 
           System.out.println(Thread.currentThread().getName()); 
        } 
}


طيب حلو واضح وشلون نسوي thread :angry:

في البدايه دعونا نقوم بتفحص الامور ،

انت لاتريد أن تعمل thread ان تريد ان تستخدم thread في برنامجك ، انت فقط تريد job done by thread

ولا لا ؟

هل تريد ان تتحكم بالـ Thread ? ? Ooh

هل تريد ان تتحكم في كيفية اختيار thread من بين الـthread المنشأه حالياً ؟

ان اردت ذلك فما عليك سوى ان تذهب لjames gosling وتقول له اريد الكود المصدري للغة الجافا ، وستجده ومن ثم تعدل على ملايين الأسطر

لاتهتم سوف اساعدك ولكن بعدما اتخرج :lol:



2- create Thread



في الجافا هناك طريقه واحده لعمل thread اعيد وأكرر طريقه واحده

وهي ان تجعل الكلاس implements Runnable

Runnable
هي interface لديها مثد واحده وهي public void run

class A implements Runnable { 
   public static void main(String... args){ 
           A a =new A(); 
   } 
        public void run() { 
                System.out.println("Hello world "); 
        } 
}


انت الآن اضفت صفه لجميع instances من الكلاس A بأنها Runnable أي بأنها hold in new Thread

طيب جميل أنت فعلت كل هذا ، والآن لديك Instance جاهزه وتريد تشغيلها ، لكن انت تعرف بأن تشغيل الثريد أو البدء في تشغيلها هي JVM specification

طيب مالحل ؟

الحل هو أنك تنشأ اوبجكت من الكلاس Thread فهو الكلاس الذي يتيح لك خيار تشغيل الثريد وتوقيفها ( لاننا اتفقنا بأنها ليست من تخصصك هذه الأمور )
class A implements Runnable { 
   public static void main(String... args){ 
           A a =new A(); 
           Thread t=new Thread(a); 
   } 
        public void run() { 
                System.out.println("Hello world "); 
        } 
}


جميل جداً ، الآن جعلت ماتريد في ثريد جديد ، ولكن حقيقة انت لم تعمل شئ !
انت فقط عرفت اوبجكت جديد من الكلاس Thread ، كيف اجعل الثريد تشتغل ؟

3- start Thread
class A implements Runnable { 
   public static void main(String... args){ 
           A a =new A(); 
           Thread t=new Thread(a); 
           t.start(); 
   } 
        public void run() { 
                System.out.println("Hello world "); 
        } 
}


الآن انت انسان رهيب وعجيب ، انشأت thread جديده واشتغلت وعملت فيها ماتريد (هنا طباعة Hello world )

نكمل بالليل ياشباب اصلي عاوز اروح للـ
VS 2005 :blink:

ليست هناك تعليقات :

إرسال تعليق