السلام عليكم
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 !
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 !

إقتباس
ما هو الــ
Thread ؟
الثريد عبارة عن مهمة او وظيفة ممكن ان تعمل مع بعض بالتوازي Parallel
الجافا تستخدم الثريد في مواضع مثل:
1. Garbage collection : الذي يعمل في الخلفية لتوفير المساحة في الذاكرة.
2. الاحداث التي تحدث على الـ GUI مسئول عن تجميعها ثريد يعمل في الخلفية
الثريد يظهر وكانه يستخدم الـ Resources الخاصة به مثل CPU,Memory, Registers لكن مع مشاركة المتغيرات .
عادة الثريد يطلق عليه اسم Light Weight Process (LWP) لانه ينفذ مهمة تماما مثل الـ Process ولكن عادة تكون خفيفة
امثلة على استخدام الثريد :
من اوضخ الامثلة متصفح الانترنت نلاحظ مثلا ان المتصفح يحمل اكثر من صورة في نفس الوقت وذلك لان كل ثريد مسئول عن تحميل صورة مختلفة
ايضا نلاحظ ان النص يبدا بالظهور في نفس الوقت الذي تظهر فيه الصور وذلك لان هناك ثريد مسئول عن تحميل و عرض الـ HTML
ايضا تجد هناك تريد مسئول عن المدخلات من المستخدم..
تخيل حياتك من غير ثريد سوف تتطر الى انتظار كل صورة على حدة ثم ظهور النص و هكذا!
الـ JVM (multithreaded ) نفسها تستخدم الثريد فهي تشغل الثريد المسئول عن Garbage collection و ثريد المسئول عن تحديث GUI و ثريد لبرنامجك الذي يعمل تحت JVM
الثريد عبارة عن مهمة او وظيفة ممكن ان تعمل مع بعض بالتوازي 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

في البدايه دعونا نقوم بتفحص الامور ،
انت لاتريد أن تعمل thread ان تريد ان تستخدم thread في برنامجك ، انت فقط تريد job done by thread
ولا لا ؟
هل تريد ان تتحكم بالـ Thread ? ? Ooh
هل تريد ان تتحكم في كيفية اختيار thread من بين الـthread المنشأه حالياً ؟
ان اردت ذلك فما عليك سوى ان تذهب لjames gosling وتقول له اريد الكود المصدري للغة الجافا ، وستجده ومن ثم تعدل على ملايين الأسطر
لاتهتم سوف اساعدك ولكن بعدما اتخرج

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

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