لقد قدمت بإيجاز استخدام جافا متعدد الخيوط. لقد قدمت بالفعل فئة الخيوط والفئة القابلة للتشغيل. من أجل فهم أفضل لتصوير الخيوط ، تجري هذه المقالة تحليلًا مفصلاً للخيط.
يبدأ()
دعنا أولاً نلقي نظرة على إدخال هذه الطريقة في واجهة برمجة التطبيقات:
يجعل الموضوع يبدأ في التنفيذ ؛ يستدعي جهاز Java Virtual طريقة تشغيل مؤشر الترابط.
والنتيجة هي أن خيطين يعملان بشكل متزامن ؛ مؤشر الترابط الحالي (تم إرجاعه من المكالمة إلى طريقة البدء) والموضوع الآخر (تنفيذ طريقة التشغيل الخاصة به).
من غير القانوني بدء موضوع عدة مرات. خاصة عندما ينتهي الخيط من التنفيذ ، لا يمكن إعادة تشغيله.
استخدم طريقة البدء لبدء مؤشر الترابط ، والذي يدرك حقًا متعدد الخيوط. في هذا الوقت ، لا تحتاج إلى انتظار رمز الجسم طريقة التشغيل لإكمال التنفيذ والمتابعة لتنفيذ الكود التالي مباشرة. يتم تشغيل مؤشر ترابط عن طريق استدعاء طريقة START () لفئة مؤشر الترابط. في هذا الوقت ، يكون الخيط في حالة جاهزة (قابل للتشغيل) ولا يعمل. بمجرد الحصول على شريحة وقت وحدة المعالجة المركزية ، تبدأ طريقة Run () في تنفيذها. هنا ، تسمى الطريقة Run () جسم الخيط. أنه يحتوي على محتوى الخيط المراد تنفيذه. تنتهي طريقة التشغيل وينتهي الخيط على الفور.
طريقة البدء هي طريقة لبدء الموضوع. بعد استخدامه ، ستقوم Java بإنشاء مؤشر ترابط جديد لتنفيذ الطريقة في التشغيل. هنا عرض تجريبي صغير:
لـ (int i = 0 ؛ i <3 ؛ i ++) {thread t = new thread (new RunNable () {Override public void run () {system.out.println (thread.currentThread (). System.out.println (thread.currentThread (). getName ()+"end") ؛ T.Start () ؛ } system.out.println ("لقد انتهى") ؛ نتائج التنفيذ:
لقد انتهى
Thread-1 Start
الموضوع -0 بداية
Thread-2 Start
الموضوع -0 نهاية
الموضوع 1 نهاية
الموضوع -2 نهاية
نظرًا لأن Multithreading عشوائي ، فقد تكون النتائج مختلفة في كل مرة ، وهو أيضًا شيء نحتاج إلى الانتباه إليه. أمر التنفيذ وترتيب استدعاء المواضيع غير متسقة.
يجري()
تتمثل طريقة التشغيل في استدعاء طريقة التشغيل الخاصة بـ Runnable Set بواسطة مؤشر الترابط وتعديل العرض التوضيحي أعلاه:
لـ (int i = 0 ؛ i <3 ؛ i ++) {thread t = new thread (new RunNable () {Override public void run () {system.out.println (thread.currentThread (). System.out.println (thread.currentThread (). getName ()+"end") ؛ T.Run () ؛ } system.out.println ("لقد انتهى") ؛ نتائج التنفيذ:
البداية الرئيسية
الطرف الرئيسي
البداية الرئيسية
الطرف الرئيسي
البداية الرئيسية
الطرف الرئيسي
لقد انتهى
تختلف النتيجة المباشرة لطريقة التشغيل تمامًا عن البداية. يتم تنفيذه بالترتيب ولا يفتح موضوعًا جديدًا.
قف()
طريقة التوقف هي إجبار إيقاف تنفيذ الخيط. إنها ليست آمنة ، لذا لا تستخدم هذه الطريقة. عندما يتم استدعاء التوقف ، سيتم إصدار الموارد المقفلة ، ولكن هذا الإصدار غير متسق ويمكن أن يتسبب بسهولة في مشاكل في البرنامج. إذا كنت ترغب في التحكم في إيقاف مؤشر الترابط ، فيمكنك استخدام متغيرات مخصصة للحكم أو طريقة الانقطاع ():
Class Thread1 يمتد Thread {Override public void run () {// judge ما إذا كان جسم مؤشر الترابط يعمل بينما (! isInterrupted ()) {// افعل شيئًا}}}} مقاطعة ()
تتمثل وظيفة المقاطعة في إخطار مؤشر الترابط الذي تمت مقاطعته ، لكن تنفيذ المقاطعة المحدد يتطلب معالجة مخصصة للمعالجة ، ويمكنك حتى تجاهله ومواصلة التنفيذ. تتمثل الوحدة المحددة في رمي مفترق المقاطع عند تنفيذ ترتيب طرق الانضمام والانتظار والنوم.
Thread T1 = New Thread (new RunNable () {Override public void run () {system.out.println (thread.currentTherTread (). getName ()+"start") ؛ حاول {for (int i = 0 ؛ i <100000 ؛ i ++) {system.out.println (i+") System.out.println ("تم مقاطعة الموضوع") ؛ // يمكنك القيام بإصدار الموارد ، وما إلى ذلك. t1.start () ؛ thread.sleep (100) ؛ T1.Interrupt () ؛نتائج التنفيذ:
656666768.
isInterrupted ()
لتحديد ما إذا كان الخيط قد توقف ، بعد تنفيذ طريقة المقاطعة أعلاه ، سيعود صحيحًا.
setPriority (int newPriority) و GetPriority ()
اضبط أولوية المواضيع واحصل على أولوية المواضيع. تركز الموارد التي تخصصها وحدة المعالجة المركزية على المواضيع ذات الأولويات الأعلى.
موضوع T1 = مؤشر ترابط جديد (جديد RunNable () {Override public void run () {long t = system.currentTimeMillis () ؛ system.out.println (thread.currentThread (). getName ()+"start") TODO تم إنشاؤه تلقائيًا. موضوع T2 = مؤشر ترابط جديد (جديد RunNable () {Override public void run () {long t = system.currentTimeMillis () ؛ system.out.println (thread.currentThread (). TODO تم إنشاؤه تلقائيًا. T1.SetPriority (10) ؛ t2.SetPriority (1) ؛ t2.start () ؛ t1.start () ؛نتائج التنفيذ:
Thread-0 StartThread-1 StartThread-0 T1 End 1357thread-1 T2 End 1371
عندما تكون الأولوية هي نفسها ، يتم إكمال T1 و T2 في نفس الوقت تقريبًا ، وهناك اختلافات واضحة عندما تكون الأولوية مختلفة.
getName ()
الأمر بسيط نسبيًا ، احصل على اسم الموضوع.
الانضمام () والانضمام (Long Millis)
تتمثل وظيفة طريقة Jion في انتظار إكمال تنفيذ مؤشر الترابط ، والانضمام إلى (Millis الطويل) يمكنه تعيين الحد الأقصى لوقت الانتظار. على سبيل المثال ، يحتاج الخيط الرئيسي إلى الانتظار حتى يكتمل مؤشر ترابط الطفل والحصول على نتيجة خيط الطفل قبل الاستمرار في التنفيذ. في هذا الوقت ، يمكنك استخدام طريقة الانضمام.
موضوع T1 = مؤشر ترابط جديد (جديد RunNable () {Override public void run () {long t = system.currentTimeMillis () ؛ system.out.println (thread.currentThread (). getName ()+"start") ؛ حاول E.PrintStackTrace () ؛ t1.start () ؛ t1.join () ؛ System.out.println ("في انتظار تنفيذ T1 قبل التنفيذ") ؛نتائج التنفيذ:
الموضوع -0 STARTTHREAD-0 T1 END 1001 انتظر حتى يتم تنفيذ T1 قبل التنفيذ
لخص
ما ورد أعلاه هو كل التفسير التفصيلي لرمز طريقة التنفيذ لخيط Java متعدد الخيوط ، وآمل أن يكون مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها.