Multithreading هو موضوع لا مفر منه وهام في Java. أدناه سنقوم بتطوير تعلم متعدد الخيوط. المحتوى التالي هو شرح للمحتوى متعدد الخيوط Java قبل "إضافة حزم JUC في JDK" ، والذي يتضمن واجهات مثل Wait () ، في فئة الكائن ؛
ملاحظة: تشير حزمة JUC إلى حزمة Java.Util.Concurrent ، والتي يتم تنفيذها بواسطة Java Master Doug Lea وإضافتها إلى Java في إصدار JDK 1.5.
قبل الدخول في دراسة الفصول التالية ، فهم أولاً بعض المفاهيم ذات الصلة من Multithreading.
مخطط حالة الموضوع
يوضح:
وتشمل المواضيع الحالات الخمس التالية.
1. حالة جديدة: بعد إنشاء كائن الخيط ، يدخل الحالة الجديدة. على سبيل المثال ، مؤشر الترابط = موضوع جديد ().
2. Runnable: المعروف أيضًا باسم "الحالة القابلة للتنفيذ". بعد إنشاء كائن مؤشر الترابط ، تقوم مؤشرات الترابط الأخرى باستدعاء طريقة start () للكائن لبدء تشغيل مؤشر الترابط. على سبيل المثال ، thread.start (). قد يتم جدولة موضوع في حالة جاهزة للتنفيذ بواسطة وحدة المعالجة المركزية في أي وقت.
3. حالة التشغيل (الجري): يحصل مؤشر الترابط على أذونات وحدة المعالجة المركزية للتنفيذ. تجدر الإشارة إلى أن المواضيع يمكنها فقط إدخال حالة التشغيل من الحالة الجاهزة.
4. الحالة المحظورة: تعني الحالة المحظورة أن الخيط يتخلى عن حقوق استخدام وحدة المعالجة المركزية لسبب ما ويتوقف مؤقتًا عن الجري. ليس حتى يدخل الخيط إلى الحالة الجاهزة أن لديها فرصة للذهاب إلى حالة الجري. هناك ثلاثة أنواع من الانسداد:
(01) في انتظار حظر - عن طريق استدعاء طريقة Wait () للاطلاع على الموضوع ، دع موضوع الانتظار حتى الانتهاء من عمل معين.
(02) الحظر المتزامن-فشل مؤشر ترابط في الحصول على قفل المزامنة المتزامنة (نظرًا لأن القفل يشغله مؤشرات ترابط أخرى) ، فسوف يدخل حالة حظر متزامنة.
(03) الحظر الآخر-سيدخل الخيط حالة حظر عن طريق الاتصال بـ Sleep () أو الانضمام () من الموضوع أو إصدار طلب I/O. عندما تم توقيت Sleep () ، انتظرت الانضمام () لإنهاء الخيط أو توقيته ، أو تم الانتهاء من معالجة الإدخال/الإخراج ، حيث تم إعادة إدخال الخيط إلى الحالة الجاهزة.
5. الحالة الميتة: انتهى الخيط من تنفيذ أو الخروج من طريقة Run () بسبب استثناء ، وينهي الخيط دورة حياته.
تتضمن المحتويات المشاركة في هذه الحالات الخمسة فئة الكائنات والخيط والكلمات الرئيسية المتزامنة. سوف نتعلم هذه المحتويات واحدة تلو الأخرى في الفصول التالية.
فئة الكائن ، تحدد وظائف النوم/الاستيقاظ مثل wait () ، إخطار () ، إخطار () ، إلخ.
تحدد فئة الموضوع بعض وظائف تشغيل مؤشر ترابط العمود. على سبيل المثال ، Sleep () وظيفة النوم ، وظيفة المقاطعة () ، getName () الحصول على اسم الخيط ، إلخ.
المزامنة هي كلمة رئيسية. تتمثل وظيفة متزامنة في السماح لمروح الحصول على قفل المزامنة للكائن.
عندما نقدم WAIT () ، والإخطار () والأساليب الأخرى بالتفصيل لاحقًا ، سنقوم بتحليل سبب تحديد "Wait () ، وإخطار () وطرق أخرى في فئة الكائن ، وليس فئة مؤشر الترابط."