0% found this document useful (0 votes)
16 views5 pages

دليل المزامنة في البرمجة

thread java2

Uploaded by

cokezibra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views5 pages

دليل المزامنة في البرمجة

thread java2

Uploaded by

cokezibra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

‫ثخحول اىل ىذه احلاهل " ‪ ،" Thread blocked‬ثنذظر "‬ ‫غندما يريد "‪ "Thread‬ان يلوم بلراءة

راءة من ملف او معلية ‪، I\O‬فيي‬


‫امـ ‪ "resource‬اىل ان يخاح ميا وثلوم ابمؼمل اخلاص هبا ‪.‬‬

‫نلـ " ‪ " run‬فيي ثنهتي بهناية ىذه ‪ method‬واليصبح ميا وحود ‪،‬‬ ‫‪thread‬‬ ‫ىذه احلاة يه ما بؼد ثنفيذ‬

‫" مؼني ومل يخحصل‬ ‫‪ " Thread‬يريد ان يعلب "‪object‬‬ ‫يف اجلافا ‪ ،‬لك "‪ "object‬هنش ئو هل ‪ lock‬خاص بو ‪ ،‬يف ىذه احلاة امـ‬
‫"‪.‬‬ ‫ػىل "‪ "lock‬اخلاص بو مبؼىن ىناك ‪ Thread‬أخر دلهيا امـ"‪ "lock‬هفسو اخلاص هبذا "‪object‬‬

‫‪ release‬نلـ"‪ "lock‬ميخحصل ػليو ‪thread‬‬ ‫فان ىذا ‪ thread‬يخحول اىل ‪ waiting state‬اىل ان يلوم ‪ thread‬الول بؼمل‬
‫امثاين ‪ ،‬يف حاة ظلب "‪ " thread‬مــ "‪ "wait‬من ‪ thread‬الول فيي حكون يف ىذه احلاهل حىت يؼمل ‪ thread‬أخر" ‪notify‬‬
‫" هل ‪ ،‬مث ثذىب اىل ‪ ready state‬مره أخرى‪.‬‬

‫" يه ‪ keyword‬يف اجلافا ‪ ،‬هممهتا امضامن ػىل ػدم دخول سوا مــ "‪ "thread‬واحده‬ ‫"‬

‫"‪ ." at one time‬و ميكن ثعبيليا ػىل ‪ method‬أو ػىل "‪" block of code‬‬

‫{ ‪class Example implements Runnable‬‬


‫{ )(‪public void run‬‬
‫;)(‪go‬‬ ‫}‬
‫{)(‪public synchronized void go‬‬
‫‪// guarantee only one thread enter this method at atime‬‬
‫}}‬

‫سوى ‪thread‬‬ ‫" ‪ ,‬هيف ثضمن اهو اليوخد‬ ‫"‪synchronized‬‬ ‫ماذا مو ننت ثؼمل ػىل ‪ object‬أو ػىل "‪ "method‬ميست‬
‫واحده يدخل مؼمل هممة ما ؟‬
‫{ ‪class Example2 implements Runnable‬‬
‫;"‪String str = "CheckThat‬‬
‫{ )(‪public void run‬‬
‫};)(‪go‬‬
‫{)(‪public void go‬‬
‫{)‪synchronized(s‬‬
‫;)" ‪s = [Link](" I_See‬‬
‫}}}‬
‫{ ‪class A implements Runnable‬‬
‫{ )(‪public void run‬‬
‫;)(‪go‬‬
‫}‬
‫{)(‪public synchronized void go‬‬
‫‪// guarantee only one thread enter this method at atime‬‬
‫}}‬

‫دليم خشصان يريدان حسب كمية ‪ 055‬دوالر من احلساب ‪ ،‬واحلساب حامي ًا "‪" balance =500‬‬
‫دلينا (‪ )two threads‬س يدخل الاول واذلي ميثهل حسني ‪ ،‬ويف اثناء دخوهل دخل امثاين ومخكن زمزم‪ ,‬الآن حسني و زمزم لكهيام‬
‫مذأندين ابن ىناك كمية ‪ 055‬دوالر ابحلساب وكابةل نلسحب وسوف يلومان ابمسحب ‪ ،‬مكن املشلكو اهو غندما حسب حسني اصبح‬
‫امرصيد صفر ‪ ،‬ومكن زمزم منذ حلظات داخل املنظومة واػلمهتا ان ىناك رصيد كابل نلسحب ‪ ،‬وملسف ثخفاحئ زمزم بأن املنظومة‬
‫اخابهتا اليوخد رصيد اكيف‪ ,‬مع امؼمل ان املنظومة منذ كليل أخابخو اهو يوخد رصيد نلسحب‪.‬‬
‫ماحلل ؟‬
‫احلل ىو اهو غندما يدخل أي ‪ thread‬يف "‪ " withdraw method‬جنؼل امرصيد مكل ميذه امـ "‪ " thread‬وىو يف ىذه‬
‫احلاة ميثهل حسني ‪,‬اي ثريد أخرى ( مثل زمزم) حريد ان ثؼمل ‪ withdraw‬جنؼليا يف ‪ waiting list‬وغندما ينهتي حسني هؼمل‬
‫‪ notify‬ميا‪.‬‬
‫}‪synchronized withdraw(int i) {//code_here‬‬

‫لك "‪ "object‬يف اجلافا هل ‪ lock‬خاص بو ‪ ،‬ذلكل اول مايدخل حسني الى ‪ synchronized method‬يأخذ " الـ ‪ "lock‬ميذا‬
‫‪ object‬ميذا امـ ‪ , .Account‬والحيق لي أحد أآخر سواء زمزم أو أي ‪ thread‬أخرى ان ثدخل أي ‪synchronized block‬‬
‫‪ ،‬ومكن ميا احلق ان ثدخل‪any non-synchronized block‬‬

‫يه حاهل ثأيت أحيا ًن غندما يكون دلينا "‪." two threads or more‬‬

‫مو دلينا ‪ thread-A‬و ‪ .thread-B‬ومو فرضنا ان ‪ thread-A‬داخل يف ‪ synchronized block‬وىذا يؼين أن‬
‫‪thread-A‬دليو ‪ lock‬اخلاص "‪ "object‬احلايل والجس خعيع أي "‪ " thread‬أخر ادلخول ميذا امبلوك من امكود‪ .‬فلو خاء‬
‫‪thread-B‬ويريد هفس "‪ "object‬سوف ينذظر اىل ان ‪ thread-A‬خيرج ويؼمل ‪ release‬نلـ ‪. lock‬‬

‫ومكن املشلكو ىنا ‪ ،‬ماذا مو اكهت ‪ thread-A‬حريد "‪ " object‬اذلي ميلكو الآن ‪ ، thread-B‬سوف ثذىب اىل "‬
‫‪ ." waiting list‬مكن ابمللابل ‪ thread-B‬ىو يريد ايض ًا "‪ " object‬اذلي ميلكو ‪ ، thread-A‬فلك واحد مهنم ينذظر الآخر ان‬
‫يخخلئ غن "‪ ، " lock‬حىت يأخذه ‪ ،‬ومس خحيل يخلابالن لن هيليام ‪ waiting‬وينذظر الآخر مخحرير انلـ ‪ lock‬حىت يأخذه‪.‬‬
‫غندما‬. "object" ‫ نلـ‬lock ‫ والميكن مناداهتام اال اذا ننت متكل‬synchronized code ‫ " جس خخدم داخل‬wait & notify "
.‫"واحد‬object" ‫ ةالثنان يشرتاكن يف‬two thread ‫يوخد دليم‬

public class Main {

public static void main(String [] args){


new Target(); }}
class A {
public int value = 0;}
class Target {
A chech = new A();
Target(){
Thread thread1 = new Thread(new Check());
Thread thread2 = new Thread(new Increment());
[Link]("Start Threads !!");
[Link]();
[Link](); }

class Check implements Runnable {


public void run() {
synchronized(chech){
for(int i = 0; i < 5; i++){
try {
[Link]("value is "+[Link]);
[Link]();}

catch(InterruptedException ex) { [Link](); }


[Link]();
}}}}

class Increment implements Runnable {


public void run() {
synchronized(a){
for(int i=0;i<5;i++){
[Link]++;
[Link]("Increment 1");
[Link]();
try {
[Link](); }

catch(InterruptedException ex){[Link]();}
}}}}
‫واحد‪ ,‬أي س خحخاج اىل اس خخدام‪Threads.‬‬ ‫غند برجمة ثعبيق هبري فاهم حامتً س خحخاج اىل ثنفيذ ػدة أوامر يف وكت‬
‫مفث ًال كد جتؼل برنجمم يخؼامل مع كاػدة بيانت و يخصل ابمنت يف هفس اموكت‪ .‬ىنا س خضعر اىل ثنفيذ لك معلية مهنم‬
‫مضن ‪ Thread‬خمخلف حىت حمتكن من جشغيليم يف هفس اموكت‪.‬‬

‫جشغيل ػدة ‪ Threads‬يف هفس اموكت كد ينــخج غنو مشلكة امخضارب ) ‪ ( Conflict‬و اميت حتدث غند وحود‬
‫اثنني ‪ Threads‬ينفذان هفس المر يف هفس اموكت أي وصلوا اىل مرحةل أصبح فهيا لك ‪ Thread‬مهنم حباخة اىل اس خخدام يشء‬
‫يس خخدمو امـ ‪ Thread‬الآخر‪.‬‬
‫فؼلي ًا‪ ,‬مشلكة امخضارب حتدث يف حال مل جنؼل امـ ‪ Threads‬يؼملون بشلك مزتامن (‪ )Synchronized‬اذا اكهوا‬
‫سيس خخدمون بؼض املصادر املشرتنة أثناء معليم‪.‬‬
‫مجيع الش ياء املخوفرة يف امـ ‪ Swing‬و اميت ميكن اضافهتا يف امنافذة ال ثنفذ بشلك مزتامن المر اذلي كد يؤدي اىل ثؼليق امربنمج يف‬
‫حال اس خخدام ‪ Threads‬يس خخدمون مصادر مشرتنة‪.‬‬

‫ثوخد ظريلذني حلل مشلكة املزامنة‬


‫امعريلة الوىل ‪:‬اخلعوات اميت ػليم فؼليا يف حال ننت ال حريد وراثة امالكس‪JFrame:‬‬
‫افؼل ‪ import‬نلالكس ‪.SwingUtilities‬‬
‫مق ببناء داة هوغيا ‪ private static void‬و أغعيا أي امس حريد‪ ,‬مث ضع فهيا لك امكود اذلي جيب أن حكذبو مبناء امنافذة‪.‬‬
‫يف ادلاة )(‪ main‬مق ابس خدػاء ادلاة )(‪ invokeLater‬و مرر ميا اكئن من االهرتفيس ‪ Runnable‬و امعل "‪" Override‬‬
‫ندلاة )(‪ run‬و احؼليا فلط جس خدغ ادلاة اميت ثبين امنافذة‪.‬‬
‫;‪import [Link]‬‬
‫{ ‪public class Test‬‬
‫{ )(‪private static void createAndShowGUI‬‬
‫}‬
‫{ )‪public static void main(String[] args‬‬
‫{ )(‪[Link](new Runnable‬‬
‫‪@Override‬‬
‫{ )(‪public void run‬‬
‫;)(‪createAndShowGUI‬‬
‫}‬
‫}} ;)}‬
‫امعريلة امثاهية ‪:‬اخلعوات اميت ػليم فؼليا يف حال ننت حريد وراثة امالكس‪JFrame:‬‬
‫افؼل ‪ import‬نلالكس ‪.SwingUtilities‬‬
‫مق بوارثة امالكس ‪.JFrame‬‬
‫مق ببناء داة هوغيا ‪ private void‬و أغعيا أي امس حريد‪ ,‬مث ضع فهيا لك امكود اذلي جيب أن حكذبو مبناء امنافذة‪.‬‬
‫احؼل امكووسرتنخور يس خدغ ادلاة اميت ثلوم ببناء امنافذة‪.‬‬
‫يف ادلاة )(‪ main‬مق ابس خدػاء ادلاة )(‪ invokeLater‬و مرر ميا اكئن من االهرتفيس ‪ Runnable‬و افؼل ‪ Override‬ندلاة‬
‫)(‪ , run‬مث مق ابوشاء اكئن من امالكس‪ ,‬و غندىا س يلوم امكووسرتنخور ابس خدػاء ادلاة اميت ثبين امنافذة‪.‬‬

‫;‪import [Link]‬‬
‫;‪import [Link]‬‬
‫{ ‪public class Test extends JFrame‬‬
‫{ )(‪public Test‬‬
‫} ;)(‪createAndShowGUI‬‬
‫} { )(‪private void createAndShowGUI‬‬
‫{ )‪public static void main(String[] args‬‬
‫{ )(‪[Link](new Runnable‬‬
‫‪@Override‬‬
‫{ )(‪public void run‬‬
‫} ;)(‪new Test‬‬
‫}};)}‬

‫مالحظة‬
‫اذا ننت جس خخدم امـ ‪ GUI Builder‬املوحود يف برنمج امـ ‪ Net Beans‬مبناء واهجة املس خخدم‪ ,‬س خالحغ أهو يراغ مشلكة‬
‫املزامنة اذا اظلؼت ػىل الوامر اميت يكذهبا لكام أضفت شيا ًا خديد ًا‪.‬‬
‫نام أهو يلوم بدسمية ادلاة اميت يضع فهيا هود اوشاء امنافذة‪initComponents().‬‬

You might also like