سنقدم محتوى تجمع الخيوط بالتفصيل لاحقًا ؛ يتضمن محتوى هذا الفصل:
مقدمة للخيط و rannable
أوجه التشابه والاختلافات بين الخيط والتشغيل
مثال على multithreading للخيط والتشغيل
مقدمة للخيط و rannable
Runnable هي واجهة تحتوي فقط على طريقة Run () واحدة فقط. تعريفه كما يلي:
نسخة الكود كما يلي:
الواجهة العامة Runnable {
المجردة المجردة المجردة () ؛
}
دور Runnable ، ينفذ متعدد الخيوط. يمكننا تحديد الفئة A لتنفيذ واجهة Runnable ؛
الموضوع هو فئة. الموضوع نفسه ينفذ الواجهة القابلة للتشغيل. بيانها على النحو التالي:
سلاسل الفئة العامة تنفذ Runnable {}
دور الخيط هو إدراك متعدد الخيوط.
أوجه التشابه والاختلافات بين الخيط والتشغيل
التشابه بين الخيط و Runnable: كلاهما "تطبيقات متعددة الخيوط".
الاختلافات بين الخيط و Runnable:
الموضوع هو فئة ، و rannable هو واجهة ؛ نحن نعلم أن "الفئة يمكن أن تحتوي فقط على فئة الوالدين واحدة ، ولكن يمكنها تنفيذ واجهات متعددة" ، لذلك Runnable لديها قابلية التوسع بشكل أفضل.
بالإضافة إلى ذلك ، يمكن أيضًا استخدام Runnable ل "مشاركة الموارد". أي أنه يتم إنشاء مؤشرات ترابط متعددة استنادًا إلى كائن معين قابل للتشغيل ، وسيشاركون الموارد على الكائن القابل للتشغيل.
بشكل عام ، يوصى بتنفيذ متعدد الخيوط من خلال "Runnable"!
أمثلة متعددة مؤشرات الترابط للموضوع و Runnable
1. مثال على القراءة المتعددة من الموضوع
أدناه ، يمكننا فهم الخيط بشكل أفضل والتشغيل من خلال الأمثلة ، والاستخلاص على مثال عبر الإنترنت أكثر إقناعًا.
نسخة الكود كما يلي:
// threadtest.java رمز المصدر
فئة MyThread يمتد الموضوع {
تذكرة int الخاصة = 10 ؛
تشغيل الفراغ العام () {
لـ (int i = 0 ؛ i <20 ؛ i ++) {
if (this.ticket> 0) {
System.out.println (this.getName ()+"تذكرة بيع: تذكرة"+this.ticket--) ؛
}
}
}
} ؛
فئة مربية الفئة العامة {
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
// ابدأ 3 موضوعات T1 ، T2 ، T3 ؛
mythread t1 = new MyThread () ؛
mythread t2 = new MyThread () ؛
mythread t3 = new MyThread () ؛
t1.start () ؛
t2.start () ؛
t3.start () ؛
}
}
نتائج التشغيل:
نسخة الكود كما يلي:
Thread-0 تذكرة بيع: Ticket10
Thread-1 Ticket Ticket: Ticket10
Thread-2 Ticket Ticket: Ticket10
Thread-1 تذكرة بيع: Ticket9
Thread-0 تذكرة بيع: Ticket9
Thread-1 تذكرة بيع: Ticket8
Thread-2 تذكرة بيع: Ticket9
Thread-1 Ticket Ticket: Ticket7
Thread-0 تذكرة بيع: Ticket8
Thread-1 Ticket Ticket: Ticket6
بيع تذكرة الموضوع 2: Ticket8
Thread-1 Ticket Ticket: Ticket5
Thread-0 تذكرة بيع: Ticket7
Thread-1 تذاكر: Ticket4
بيع تذكرة الموضوع 2: Ticket7
Thread-1 تذكرة بيع: Ticket3
Thread-0 تذكرة بيع: Ticket6
Thread-1 تذكرة بيع: Ticket2
بيع تذكرة الموضوع 2: Ticket6
وصف النتائج:
(01) يرث mythread من مؤشر الترابط ، وهو مؤشر ترابط مخصص. كل mythread تبيع 10 تذاكر.
(02) يخلق الخيط الرئيسي الرئيسي ويبدأ 3 مؤشرات ترابط الطفل mythread. كل خيط طفل يبيع 10 تذاكر.
2. مثال متعدد الإشراف على Runnable
بعد ذلك ، نقوم بتعديل البرنامج أعلاه. تنفيذ واجهة من خلال RunNable ، وبالتالي تنفيذ متعدد الخيوط.
نسخة الكود كما يلي:
// runnabletest.java رمز المصدر
الفئة myThread تنفذ Runnable {
تذكرة int الخاصة = 10 ؛
تشغيل الفراغ العام () {
لـ (int i = 0 ؛ i <20 ؛ i ++) {
if (this.ticket> 0) {
System.out.println (thread.currentThRead (). getName ()+"Ticket Sell: Ticket"+this.ticket--) ؛
}
}
}
} ؛
الطبقة العامة RunnableTest {
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
mythread mt = new MyThread () ؛
.
الموضوع T1 = مؤشر ترابط جديد (MT) ؛
الموضوع T2 = مؤشر ترابط جديد (MT) ؛
الموضوع T3 = مؤشر ترابط جديد (MT) ؛
t1.start () ؛
t2.start () ؛
t3.start () ؛
}
}
نتائج التشغيل:
نسخة الكود كما يلي:
Thread-0 تذكرة بيع: Ticket10
بيع تذكرة الموضوع 2: Ticket8
Thread-1 تذكرة بيع: Ticket9
بيع تذكرة الموضوع 2: Ticket6
Thread-0 تذكرة بيع: Ticket7
Thread-2 تذاكر: Ticket4
Thread-1 Ticket Ticket: Ticket5
Thread-2 تذاكر: Ticket2
Thread-0 تذكرة بيع: Ticket3
Thread-1 تذاكر: Ticket1
وصف النتائج:
(01) على عكس ما ورد أعلاه "MyThread يرث من الخيط" ؛
(02) يخلق الخيط الرئيسي الرئيسي ويبدأ 3 مؤشرات ترابط للأطفال ، ويتم إنشاء كل هذه الخيوط الثلاثة للأطفال بناءً على "MT ، كائن Runnable". نتيجة العملية هي أن هذه الخيوط الثلاثة التي تباعت ما مجموعه 10 تذاكر. هذا يعني أنهم يشاركون واجهة mythread.