عند إنشاء مؤشر ترابط وبدء ، لا يدخل حالة التنفيذ بمجرد بدء تشغيله ولا هو دائمًا في حالة التنفيذ. خلال دورة حياتها ، يجب أن تمر من خلال خمس ولايات: "جديدة" ، "Runnable" ، "Running" ، "LOCKED" و "Dead". بعد إنشاء الخيط ، من المستحيل أن يشغل وحدة المعالجة المركزية وتشغيلها بشكل مستقل. يحتاج إلى التبديل بين مؤشرات ترابط متعددة ، لذلك يتم تبديلها بين التشغيل وحظر معظم الوقت.
1. حالة الموضوع
هناك عدة حالات مختلفة لوجود خيط ، على النحو التالي:
1. حالة جديدة
الدولة الجديدة هي حالة تم فيها إنشاء الخيط ولكنه لم يبدأ تشغيله. تسمح هذه الحالة للمعلومات بتشغيلها عن طريق استدعاء طريقة START () للمعلومات.
2. حالة قابلة للتشغيل
يمكن تسمية حالة Runnable بحالة الجري التحضيرية أو قائمة الانتظار. يمكن أن تسمح هذه الحالة للمعلومات بتشغيلها عن طريق استدعاء طريقة START () للمعلومات.
يحدد جدولة مؤشرات الترابط المواضيع التي سيتم تشغيلها والوقت الذي سيتم تشغيله.
3. حالة التشغيل
إذا تم تنفيذ موضوع ، فهو في حالة الجري.
4. الوضع الميت
بمجرد دخول الخيط إلى الحالة الميتة ، لم يعد بإمكانه التشغيل.
5. الحالة غير القابلة للتشغيل
يقوم Java Virtual Machine JVM بتنفيذ مؤشرات الترابط وفقًا لأولوية مؤشر الترابط ومبادئ الجدولة.
2. جدولة الموضوع
في JVM ، يعتمد تنفيذ جدولة الخيوط عادةً على الاستراتيجيتين التاليتين:
استراتيجية الجدولة الاستراتيجية الاستراتيجية المتبادلة في الوقت أو استراتيجية جدولة الجولة الدائرية
إن تنفيذ جدولة مؤشرات الترابط مستقلة عن النظام الأساسي ، وبالتالي فإن جدولة المواضيع لا يمكن التنبؤ بها.
3. أولوية المواضيع
يعين JVM أولوية لكل مؤشر ترابط تم إنشاؤه حديثًا.
المستوى 0: هذا هو أدنى أولوية
المستوى 5: هذه هي الأولوية العادية
المستوى 10: هذه هي أولوية أعلى
لحفظ هذه القيم ، تحتوي فئة مؤشر الترابط على ثلاثة متغيرات مقابلة:
سوف يرث الخيط أولاً أولوية خيط الأصل. الأولوية الافتراضية لكل مؤشر ترابط هي المستوى 5 (الأولوية العادية) ، والأولوية الافتراضية للموضوع الرئيسي هي المستوى 5.
يمكن تعيين أولوية مؤشر الترابط من خلال طريقة setPriority (int ذات الأولوية).
setPriority النهائي النهائي (INT ذات الأولوية)
باطل عام getPriority () ؛
يحتوي مؤشر ترابط المعرفة المعرفة من قبل المستخدم على رقم تسلسل اسم مؤشر ترابط افتراضي+ رقم تسلسل ، ويبدأ رقم التسلسل من 0 ، مثل مؤشر الترابط الأول هو Thread0.
يمكن تعيين اسم مؤشر الترابط من خلال طريقة setName (اسم السلسلة) ، ويمكن الحصول على اسم مؤشر الترابط باستخدام طريقة getName ().
setName الفراغ النهائي العام (اسم السلسلة)
السلسلة النهائية العامة getName ().
مثال
لنرى مثالًا أدناه:
Package Demo.Ch ؛ userTrathread public user thouse {userthread () {super () ؛ } userThRead (اسم السلسلة) {super (name) ؛ } public void run () {system.out.println ("بدأ تشغيل الموضوع ..") ؛ } public static void main (string [] args) {userThread thread1 = new userThread ("thread1") ؛ userTrathread thread2 = جديد userThread ("thread2") ؛ System.out.println ("الموضوع 1 الاسم الأولي والأولوية") ؛ System.out.println ("name:" + thread1.getName ()) ؛ System.out.println ("الأولوية:" + thread1.getPriority ()) ؛ System.out.println ("Thread 2 الاسم الأولي والأولوية") ؛ System.out.println ("name:" + thread2.getPriority ()) ؛ system.out.println ("الأولوية:" + thread2.getPriority ()) ؛ System.out.println ("") ؛ thread1.setPriority (6) ؛ Thread2.SetPriority (9) ؛ System.out.println ("الموضوع 1 الاسم الأولي والأولوية") ؛ System.out.println ("name:" + thread1.getName ()) ؛ System.out.println ("الأولوية:" + thread1.getPriority ()) ؛ System.out.println ("Thread 2 الاسم الأولي والأولوية") ؛ system.out.println ("name:" + thread2.getName ()) ؛ system.out.println ("الأولوية:" + thread2.getPriority ()) ؛ System.out.println ("") ؛ thread1.start () ؛ thread2.start () ؛ لـ (int i = 0 ؛ i <5 ؛ i ++) system.out.println ("الطريقة الرئيسية i القيمة:"+i) ؛ }}نتيجة الإخراج:
الموضوع 1 الاسم الأولي والاسم الأولوية الاسم: thread1priority: 5thread 2 الاسم الأولي والاسم الأولوية الاسم: Thread2Priority: 5thread 1 الاسم الأولي والاسم الأولوية: thread1priority: 6thread 2 الاسم الأولي والاسم الأولوية: method thread2priority: 3main meth
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!