شرح مفصل لخيوط Java والفرق بين المواضيع والعمليات
1. العمليات والموضوعات
كل عملية لديها مساحة ذاكرة فريدة ، ويمكن للتطبيق بدء عمليات متعددة في نفس الوقت. على سبيل المثال ، في متصفح IE ، فإن فتح متصفح IE يعادل بدء العملية.
يشير مؤشر الترابط إلى عملية تنفيذ في عملية ، ويمكن أن تحتوي العملية على مؤشرات ترابط متعددة.
تحتاج كل عملية إلى نظام التشغيل لتخصيص مساحة ذاكرة مستقلة لها ، وتشترك مؤشرات ترابط متعددة في نفس العملية في هذه المساحة ، أي الذاكرة المشتركة والموارد الأخرى.
في كل مرة يتم استدعاء Java.exe ، سيبدأ نظام التشغيل عملية الجهاز الظاهري Java. عند بدء عملية Java Virtual Machine ، ستنشئ جهاز Java Virtual مؤشر ترابط رئيسي ، والذي سيبدأ في التنفيذ من طريقة مدخل البرنامج الرئيسية.
في كل مرة يبدأ فيها جهاز Java Virtual مؤشر ترابط ، سيقوم بتعيين مكدس طريقة مؤشر ترابط إلى مؤشر ترابط لتخزين المعلومات ذات الصلة (مثل المتغيرات المحلية ، إلخ) ، ويعمل مؤشر الترابط على هذا المكدس. لذلك ، فإن المتغيرات المحلية في كائنات Java آمنة من مؤشرات الترابط ، ولكن لا يتم تخزين متغيرات الأمثلة ومتغيرات الفئة في المكدس ، لذلك فهي ليست آمنة مؤشرات الترابط.
هناك ثلاث حالات للعملية: جاهزة ، تنفيذ ، وحظر.
2. طريقة إنشاء الموضوع
طريقة Runnable: (هذه الطريقة مرنة ، موصى بها)
تقوم Thread02 العامة بتنفيذ Runnable {public static void main (string [] args) {runnable r = new <strong> thread02 </strong> () ؛ الموضوع T1 = موضوع جديد (<strong> r </strong> ، "T1") ؛ /*** رمز مصدر الموضوع* مؤشر ترابط عام (هدف Runnable ، اسم السلسلة) {init (null ، الهدف ، الاسم ، 0) ؛ } */ thread t2 = مؤشر ترابط جديد (r ، "t2") ؛ t1.start () ؛ // START THERD T1 ، في حالة جاهزة ، في انتظار وحدة المعالجة المركزية T2.START () ؛ // Start Thread T2 ، في حالة جاهزة ، في انتظار وحدة المعالجة المركزية t1.run () ؛ // يدعو مؤشر الترابط الرئيسي إلى طريقة تشغيل الكائن T1} public void run () {system.out.println ("اسم مؤشر الترابط هو" + thread.currentThRead (). getName ()) ؛ }}قد تكون نتيجة العملية:
اسم الموضوع هو اسم T1Thread هو اسم Mainthread هو T2
رأس الطريق
يمتد Thread03 من الفئة العامة Thread {public static void main (string [] args) {thread03 t1 = new <strong> thread03 </strong> () ؛ // اكتبها كمعلومات t1 = new thread () ملاحظة: thread03 هو مؤشر ترابط في هذا الوقت t1.start () ؛ } public void run () {system.out.println ("اسم الخيط هو" + thread.currentThRead (). getName ()) ؛ }}النتيجة الجارية: اسم الموضوع هو Thread-0
ملاحظة: بالإضافة إلى مؤشرات الترابط المخصصة ، يوجد أيضًا مؤشر ترابط رئيسي في كل مرة يتم فيها تشغيل البرنامج.
شامل:
الفئة العامة thread01 {public static void main (string [] args) {thread thread = new thread () ؛ thread.start () ؛ // ما يعمل حقًا هو تشغيل ()/** وتشغيله في موضوع* public void run () {if (target! = null) {target.run () ؛ }}} لذلك يحتاج مؤشر الترابط الذي أنشأته بنفسك إلى إعادة كتابة طريقة التشغيل ووضع المحتوى المراد تنفيذه في Run () ، لذلك تحتاج إلى تنفيذ الواجهة أو الميراث ثم إنشاء الفئات الفرعية*// (InterruptedException e) {e.printstacktrace () ؛ } //Thread.CurrentTherD () يحصل على نظام الخيط الحالي. }}}} ؛ // thread1.start () ؛ // غير قادر على البدء دون كتابة مؤشر ترابط // كيفية إنشاء سلسلة مؤشر ترابط 2 Runnable (التنفيذ) ، يوصى باستخدام Thread2 = new thread (new runnable () {public void run () {while (true) {try {thread.sleep (300) ؛} catch (interrupexception e) { "+thread.currentThRead (). getName ()) ؛}}}) ؛ // thread2.start () ؛ . "+thread.currentThRead (). getName ()) ؛ } }.يبدأ()؛ } /****من المحتمل جدًا أن يقلل تنفيذ Multihroading في وحدة المعالجة المركزية واحدة من كفاءة التنفيذ بدلاً من تحسين شخص واحد يفعل الشيء نفسه في أماكن مختلفة* /}شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!