هناك طريقتان لإنشاء سلاسل رسائل في Java: استخدام فئة Thread واستخدام الواجهة القابلة للتشغيل. عند استخدام واجهة Runnable، تحتاج إلى إنشاء مثيل Thread. لذلك، سواء قمت بإنشاء مؤشر ترابط من خلال فئة Thread أو الواجهة القابلة للتشغيل، يجب عليك إنشاء مثيل لفئة Thread أو فئتها الفرعية. تم تحميل مُنشئ فئة Thread ثماني مرات، والمنشئ كما يلي:
مثيل لفئة تنفذ الواجهة القابلة للتشغيل. تجدر الإشارة إلى أن فئة Thread تنفذ أيضًا واجهة قابلة للتشغيل، لذلك يمكن أيضًا تمرير مثيلات الفئات الموروثة من فئة Thread إلى هذا المُنشئ كأهداف.
اسم السلسلة
اسم الخيط. يمكن تعيين هذا الاسم من خلال طريقة setName لفئة Thread بعد إنشاء مثيل Thread. إذا لم يتم تعيين اسم مؤشر الترابط، يستخدم مؤشر الترابط اسم مؤشر الترابط الافتراضي: Thread-N هو الترتيب الذي تم إنشاء مؤشر الترابط به وهو عدد صحيح موجب غير متكرر.
مجموعة الموضوع
مجموعة مؤشرات الترابط التي ينتمي إليها مؤشر الترابط الذي تم إنشاؤه حاليًا. إذا لم يتم تحديد مجموعة سلاسل رسائل، تتم إضافة كافة سلاسل الرسائل إلى مجموعة سلاسل رسائل افتراضية. سيتم مناقشة التفاصيل حول مجموعات المواضيع بالتفصيل في الفصول اللاحقة.
حجم المكدس الطويل
حجم مكدس مؤشر الترابط هذه القيمة بشكل عام عبارة عن عدد صحيح مضاعف لصفحة وحدة المعالجة المركزية. على سبيل المثال، حجم صفحة x86 هو 4 كيلو بايت ضمن النظام الأساسي x86، حجم مكدس مؤشر الترابط الافتراضي هو 12 كيلو بايت.
يمكن لفئة Java العادية أن تصبح فئة مؤشر ترابط طالما أنها ترث من فئة الموضوع. ويمكن تنفيذ رمز الخيط من خلال طريقة البدء لفئة الخيط. على الرغم من أنه يمكن إنشاء مثيل للفئات الفرعية لفئة Thread مباشرة، إلا أنه يجب تجاوز طريقة تشغيل فئة Thread في الفئة الفرعية لتشغيل رمز مؤشر الترابط فعليًا. التعليمة البرمجية التالية تعطي مثالاً لاستخدام فئة Thread لإنشاء سلسلة رسائل:
الطبقة العامة Thread1 تمتد الموضوع
{
تشغيل الفراغ العام ()
{
System.out.println(this.getName());
}
الفراغ العام الثابت الرئيسي (String[] args)
{
System.out.println(Thread.currentThread().getName());
Thread1 thread1 = new Thread1();
Thread1 thread2 = new Thread1 ();
Thread1.start();
Thread2.start();
}
}
نتائج تشغيل الكود أعلاه هي كما يلي:
ملاحظة: يجب أن يحتوي أي برنامج جافا على موضوع رئيسي. بشكل عام، اسم هذا الموضوع الرئيسي هو main فقط عن طريق إنشاء سلاسل رسائل أخرى في البرنامج، ويمكن اعتباره برنامجًا حقيقيًا متعدد الخيوط. بمعنى آخر، يجب أن يحتوي البرنامج متعدد الخيوط على أكثر من مؤشر ترابط واحد.
تحتوي فئة Thread على مُنشئ محمّل بشكل زائد يمكنه تعيين اسم مؤشر الترابط. بالإضافة إلى استخدام طريقة المُنشئ لتعيين اسم مؤشر الترابط عند إنشاء مؤشر ترابط، يمكنك أيضًا استخدام طريقة setName لفئة مؤشر الترابط لتعديل اسم مؤشر الترابط. لتعيين اسم مؤشر الترابط من خلال مُنشئ فئة Thread، يجب عليك استخدام مُنشئ الموضوع العام (اسم السلسلة) لفئة Thread في الفئة الفرعية لـ Thread. لذلك، يجب عليك أيضًا إضافة مؤشر ترابط لتمرير الفئة الفرعية لـ Thread. منشئ الاسم. الكود التالي يعطي مثالا لتحديد اسم الموضوع:
الطبقة العامة Thread2 تمتد الموضوع
{
سلسلة خاصة من؛
تشغيل الفراغ العام ()
{
System.out.println(who + ":: + this.getName());
}
الموضوع العام 2 (سلسلة من)
{
ممتاز()؛
this.who = who;
}
الموضوع العام 2 (سلسلة من، اسم السلسلة)
{
سوبر (الاسم)؛
this.who = who;
}
الفراغ العام الثابت الرئيسي (String[] args)
{
Thread2 thread1 = new Thread2 ("thread1"، "MyThread1")؛
Thread2 thread2 = new Thread2 ("thread2");
Thread2 thread3 = new Thread2("thread3");
thread2.setName("MyThread2");
Thread1.start();
Thread2.start();
Thread3.start();
}
السطر 011: العينة العامة 2_2 (سلسلة من)
يحتوي هذا المنشئ على معلمة واحدة: Who. يتم استخدام هذه المعلمة لتحديد مؤشر الترابط الذي تم إنشاؤه حاليًا. لا يزال يُستدعى المُنشئ الافتراضي للخيط public Thread() في هذا المُنشئ.
السطر 016: عينة عامة 2_2 (سلسلة من، اسم السلسلة)
من في هذا المنشئ له نفس معنى من في المنشئ الأول، ومعلمة الاسم هي اسم الخيط. في هذا المنشئ، يتم استدعاء مُنشئ الموضوع العام (اسم السلسلة) لفئة الموضوع، وهو سوبر (اسم) في السطر 018.
يتم إنشاء ثلاثة سلاسل في الطريقة الرئيسية: Thread1 وthread2 وthread3. من بينها، يضبط Thread1 اسم الخيط من خلال طريقة الإنشاء، ويعدل Thread2 اسم الخيط من خلال طريقة setName، ولا يقوم Thread3 بتعيين اسم الخيط.
نتائج التشغيل هي كما يلي:
ملاحظة: يمكنك استخدام setName لتعيين اسم مؤشر الترابط قبل وبعد استدعاء أسلوب البدء، ومع ذلك، فإن استخدام setName لتعديل اسم مؤشر الترابط بعد استدعاء أسلوب البدء سيؤدي إلى عدم اليقين، مما يعني أنه قد لا يتم تنفيذ setName حتى يتم تشغيل أسلوب التشغيل. إذا كنت تريد استخدام اسم مؤشر الترابط في طريقة التشغيل، فستكون هناك ظاهرة مفادها أنه على الرغم من استدعاء طريقة setName، لا يتم تعديل اسم مؤشر الترابط.
لا يمكن استدعاء أسلوب البدء لفئة Thread عدة مرات، على سبيل المثال، لا يمكن استدعاء الأسلوب thread1.start() مرتين. وإلا سيتم طرح IllegalThreadStateException.