دليل التزامن في جافا

نشرت: 2022-10-23

قبل أن نشرح المزامنة في Java ، يجب أن نعيد النظر بإيجاز في مفهوم تعدد مؤشرات الترابط. تتيح ميزة تعدد مؤشرات الترابط في Java التنفيذ المتزامن لجزئين أو أكثر من البرنامج لتحقيق أقصى استخدام لوحدة المعالجة المركزية. كل جزء من هذا البرنامج عبارة عن خيط ، والخيوط هي عمليات خفيفة الوزن داخل عملية.

الآن ، قد تحاول سلاسل رسائل متعددة الوصول إلى نفس الموارد وتنتج نتائج غير دقيقة. لذلك ، يجب أن يكون هناك بعض المزامنة للتأكد من أن مؤشر ترابط واحد فقط لديه حق الوصول إلى الموارد في نقطة زمنية معينة.

تحقق من دوراتنا التكنولوجية المجانية لتتفوق على المنافسة.

سوف يستكشف هذا الدليل حول ما هو التزامن في Java مفهوم المزامنة بالتفصيل مع الأمثلة.

تعلم دورات تطوير البرمجيات عبر الإنترنت من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.

جدول المحتويات

ما هو التزامن في جافا؟

تزامن Java هو القدرة على التحكم في وصول سلاسل رسائل متعددة إلى مورد مشترك. يكون مفيدًا عندما تحاول برامج Java متعددة الخيوط الوصول إلى نفس المورد وتنتج نتائج خاطئة. باستخدام ميزة مزامنة Java ، يمكن لخيط واحد فقط الوصول إلى المورد في نقطة زمنية معينة.

توفر Java طريقة لمزامنة مهمة الخيوط باستخدام الكتل المتزامنة التي تتزامن على نفس الكائن ويمكن أن يكون لها مؤشر ترابط واحد يتم تنفيذه بداخلها في كل مرة. يتم تمييز هذه الكتل بالكلمة الأساسية المتزامنة ، مما يحظر أي مؤشر ترابط آخر يحاول الوصول إلى الكتلة المتزامنة حتى ينتهي الخيط الموجود بالفعل داخل الكتلة من تنفيذه ويترك الكتلة.

تحقق من شهادة upGrad المتقدمة في DevOps

بناء الجملة لكتابة كتلة متزامنة

الصيغة العامة لكتابة كتلة متزامنة في Java هي كما يلي:

متزامن (lockObject)

{

// البيانات المتزامنة

}

استكشف دوراتنا التدريبية الشهيرة في هندسة البرمجيات

ماجستير العلوم في علوم الكمبيوتر من جامعة جون مورس بليفربول و IIITB برنامج شهادة الأمن السيبراني من معهد كاليفورنيا للتكنولوجيا CTME
برنامج تدريب تطوير المكدس الكامل برنامج PG في Blockchain
برنامج PG التنفيذي في تطوير Full Stack
عرض جميع دوراتنا أدناه
دورات هندسة البرمجيات

في الصيغة أعلاه ، يشير lockObject إلى كائن يرتبط قفله بالعناصر المتزامنة. الآن ، هذا يقودنا إلى مفهوم القفل في Java.

تحقق من شهادة upGrad المتقدمة في الأمن السيبراني

أقفال في جافا

تم بناء التزامن في Java حول القفل أو الشاشة. كل كائن له قفل مرتبط. من الناحية المثالية ، يجب أن يحصل مؤشر الترابط الذي يتطلب الوصول إلى حقول الكائن أولاً على قفل الكائن. القفل عبارة عن آلية مزامنة أكثر تطوراً ومرونة من كتلة التزامن. يتم تعريفه داخل حزمة java.util.concurrent.lock التي تحتوي على تطبيقات قفل واسعة النطاق.

مهارات تطوير البرمجيات عند الطلب

دورات جافا سكريبت دورات جافا الأساسية دورات هياكل البيانات
دورات Node.js دورات SQL دورات تطوير مكدس كاملة
دورات NFT دورات DevOps دورات البيانات الضخمة
دورات React.js دورات الأمن السيبراني دورات الحوسبة السحابية
دورات تصميم قواعد البيانات دورات بايثون دورات العملات المشفرة

طريقة جافا المتزامنة

الغرض من أسلوب Java المتزامن هو قفل الكائنات للموارد المشتركة. وبالتالي ، عندما تستدعي الخيوط طريقة متزامنة ، تحصل الطريقة تلقائيًا على قفل لهذا الكائن وتحرره بمجرد أن ينفذ مؤشر الترابط وظيفته.

فيما يلي مثال على طريقة Java المتزامنة:

// مثال على طريقة جافا المتزامنة

جدول الفصل {

printTable باطل متزامن (int n) {// الطريقة المتزامنة

لـ (int i = 1 ؛ i <= 5 ؛ i ++) {

System.out.println (n * i) ؛

محاولة{

Thread.sleep (400) ؛

} catch (استثناء هـ) {System.out.println (e)؛}

}

}

}

تمدد فئة MyThread1 سلسلة الرسائل {

لوح؛

MyThread1 (الجدول ر) {

this.t = t ؛

}

تشغيل باطل عام () {

t.printTable (5) ؛

}

}

تمدد فئة MyThread2 سلسلة الرسائل {

لوح؛

MyThread2 (الجدول ر) {

this.t = t ؛

}

تشغيل باطل عام () {

t.printTable (100) ؛

}

}

فئة عامة TestSynchronization2 {

العامة الثابتة الفراغ الرئيسي (سلاسل سلسلة []) {

كائن الجدول = جدول جديد () ؛ // كائن واحد فقط

MyThread1 t1 = جديد MyThread1 (obj) ؛

MyThread2 t2 = جديد MyThread2 (obj) ؛

t1.start () ؛

t2.start () ،

}

}

اقرأ مقالاتنا الشهيرة المتعلقة بتطوير البرمجيات

كيف يتم تنفيذ تجريد البيانات في Java؟ ما هي الطبقة الداخلية في جافا؟ معرفات Java: التعريف والنحو والأمثلة
فهم التغليف في OOPS بأمثلة شرح حجج سطر الأوامر في لغة سي أهم 10 ميزات وخصائص للحوسبة السحابية في عام 2022
تعدد الأشكال في جافا: المفاهيم والأنواع والخصائص والأمثلة الحزم في Java وكيفية استخدامها؟ برنامج Git التعليمي للمبتدئين: تعلم Git من الصفر

انتاج:

5

10

15

20

25

100

200

300

400

500

ماذا يحدث بدون التزامن؟

الآن ، دعنا نلقي نظرة على البرنامج السابق بدون مزامنة (لاحظ عدم وجود الكلمة الأساسية المتزامنة).

جدول الفصل {

باطل printTable (int n) {// طريقة غير متزامنة

لـ (int i = 1 ؛ i <= 5 ؛ i ++) {

System.out.println (n * i) ؛

محاولة{

Thread.sleep (400) ؛

} catch (استثناء هـ) {System.out.println (e)؛}

}

}

}

تمدد فئة MyThread1 سلسلة الرسائل {

لوح؛

MyThread1 (الجدول ر) {

this.t = t ؛

}

تشغيل باطل عام () {

t.printTable (5) ؛

}

}

تمدد فئة MyThread2 سلسلة الرسائل {

لوح؛

MyThread2 (الجدول ر) {

this.t = t ؛

}

تشغيل باطل عام () {

t.printTable (100) ؛

}

}

فئة TestSynchronization1 {

العامة الثابتة الفراغ الرئيسي (سلاسل سلسلة []) {

كائن الجدول = جدول جديد () ؛ // كائن واحد فقط

MyThread1 t1 = جديد MyThread1 (obj) ؛

MyThread2 t2 = جديد MyThread2 (obj) ؛

t1.start () ؛

t2.start () ،

}

}

انتاج:

5

100

10

200

15

300

20

400

25

500

كما ترى ، الإخراج غير متناسق بدون المزامنة.

أنواع التزامن في جافا

للإجابة عن تزامن الخيط في Java ، لدينا نوعان متاحان من المزامنة: مزامنة الخيط ومزامنة العملية.

دعونا نفهم ما يعنيه كل منهما.

مزامنة الموضوع: عندما تحاول سلاسل رسائل متعددة الوصول إلى مورد مشترك ، يجب أن نتأكد من استخدام المورد بواسطة مؤشر ترابط واحد فقط في كل مرة. مزامنة مؤشر الترابط هي عملية السماح لمؤشر ترابط واحد فقط باستخدام المورد المشترك عندما تحاول مؤشرات ترابط متعددة استخدام المورد في وقت واحد.

تزامن العملية: يشير إلى التنفيذ المتزامن لعمليات متعددة للوصول إلى حالة تلتزم فيها العمليات بترتيب مناسب للتنفيذ. تكون مزامنة العملية مطلوبة عندما تتعاون عمليتان أو أكثر ، ويؤثر تنفيذ إحدى العمليات على الأخرى. وبالتالي ، فإن مزامنة العملية تقضي على احتمال وجود مخرجات غير دقيقة وتضمن ترتيب التنفيذ الصحيح.

طرق التزامن في جافا

بشكل عام ، هناك أربع طرق للمزامنة في Java:

  • طرق ثابتة متزامنة
  • طرق المثيل المتزامنة
  • كتلة متزامنة داخل طرق ثابتة
  • كتلة متزامنة داخل طرق المثيل

دعونا نلقي نظرة على كل طريقة من طرق مزامنة Java بمزيد من التفصيل.

طرق ثابتة متزامنة

هنا ، نستخدم الكلمة الأساسية المتزامنة لتمييز الطرق الثابتة في Java. فيما يلي مثال على طريقة Java ثابتة متزامنة:

برنامج MyStaticCounter الثابت العام {

عدد صحيح ثابت خاص = 0 ؛

زيادة باطلة متزامنة ثابتة عامة (قيمة int) {

العد + = القيمة ؛

}

}

طرق المثيل المتزامنة

عند استخدام كتلة متزامنة مع طرق المثيل ، يكون لكل كائن طريقته المتزامنة. يمكن أن يحتوي كل كائن على مؤشر ترابط واحد فقط يمكن تنفيذه داخل الأسلوب. في حالة وجود كائنات متعددة ، يمكن تنفيذ مؤشر ترابط واحد لكل كائن داخل الكتلة.

فئة عامة MyCounter {

عدد العمليات الخاصة = 0 ؛

الزيادة العامة الباطلة المتزامنة (قيمة int) {

this.count + = value؛

}

إنقاص الفراغ المتزامن العام (قيمة int) {

this.count - = القيمة ؛

}

}

كتلة متزامنة داخل طرق ثابتة

يوجد أدناه مثال حيث نستخدم كتلة متزامنة داخل طريقة ثابتة:

فئة عامة MyClass {

طباعة باطلة ثابتة عامة (رسالة سلسلة) {

متزامن (MyClass.class) {

log.writeln (رسالة) ؛

}

}

}

كتلة متزامنة داخل طرق المثيل

بدلاً من مزامنة الطريقة بأكملها ، يمكننا استخدام المزامنة على كتلة معينة داخل الطريقة. فيما يلي مثال على كتلة متزامنة من التعليمات البرمجية داخل طريقة غير متزامنة:

زيادة الفراغ العام (قيمة int) {

متزامن (هذا) {

this.count + = value؛

}

}

الحاجة إلى التزامن في جافا

الآن بعد أن عرفت ما هي المزامنة في Java ، قد تتساءل عن سبب استخدامها في المقام الأول.

توفر الكلمة الأساسية المتزامنة لـ Java وظائف أساسية للبرمجة المتزامنة. إليك كيف تساعد المزامنة في Java:

  • توفر مزامنة Java ميزة القفل لإزالة أي حالة تعارض بين الخيوط وضمان الوصول الحصري للطرفين إلى المورد المشترك.
  • يوفر القفل المتزامن لـ Java ميزات القفل وفتح القفل. لذلك ، يحتاج الخيط إلى الحصول على القفل قبل الدخول في طريقة أو كتلة متزامنة.
  • تمنع الكلمة الأساسية المتزامنة إعادة ترتيب عبارات البرنامج بواسطة المترجم.

استنتاج

تلخيصًا ، تتأكد المزامنة في Java من أن مؤشر ترابط واحد فقط يمكنه الوصول إلى المورد المشترك في كل مرة. يمكننا جعل كتلة أو طريقة متزامنة باستخدام الكلمة الأساسية المتزامنة لـ Java. عندما يريد الخيط الدخول داخل كتلة متزامنة ، يجب أن يحصل على قفل ، وبعد مغادرة الكتلة ، يقوم الخيط بتحرير القفل. يمكننا استخدام الكلمة الأساسية المتزامنة إما مع الطرق أو داخل كتلة طريقة ما.

هل تريد تعلم المفاهيم الأساسية في Java؟ يعد برنامج upGrad Executive Post Graduate في تطوير البرمجيات - التخصص في دورة Full Stack Development عبارة عن برنامج عبر الإنترنت لمدة 7 أسابيع للمبتدئين الذين يرغبون في استكشاف وظائف تطوير البرمجيات. احضر الفصول الدراسية الحية والتفاعلية وجلسات التدريب وأكثر من 35 ساعة من المحتوى الذي يقدمه رواد الصناعة للحصول على شهادة إتمام من upGrad.

اشترك اليوم للاستفادة من مزايا upGrad الحصرية لدعم الطلاب على مدار الساعة طوال أيام الأسبوع والشبكات الصناعية!

لماذا نستخدم المزامنة في جافا؟

تضمن الكلمة الأساسية المتزامنة في Java أن مؤشر ترابط واحد فقط يمكنه الوصول إلى الموارد المشتركة في كل مرة. يكون مفيدًا عندما تحاول برامج Java متعددة مؤشرات الترابط الوصول إلى نفس المورد وإنتاج نتائج غير دقيقة.

كيف يتم تنفيذ المزامنة في Java؟

تنفذ Java المزامنة باستخدام مفهوم الشاشات مع مؤشر ترابط واحد فقط يمتلك شاشة في وقت معين. عندما يكتسب الخيط قفلًا ، فإنه يصل إلى الشاشة ، وتظل جميع الخيوط الأخرى التي تحاول الوصول إلى الشاشة المقفلة محظورة حتى يترك الخيط الأول الشاشة.

ما هو الجمود في جافا؟

يحدث الجمود في Java عندما ينتظر مؤشر ترابط قفل كائن ، لكن مؤشر ترابط آخر يكتسبه ، وينتظر مؤشر الترابط الثاني قفل الكائن الذي تم الحصول عليه بواسطة الأول. ومن ثم ، فإن كلا الخيطين ينتظران بعضهما البعض لتحرير القفل ، مما يؤدي إلى طريق مسدود.