فئة خيوط Java هي أيضًا فئة كائنات ، ومثيرة لها من Java.lang.Thread أو فئة الفرعية. يمكنك إنشاء موضوع في Java بالطريقة التالية. يمكن تنفيذ مؤشر الترابط استدعاء طريقة START () من مؤشر الترابط:
THERD THELD = NEW THREAP () ؛
thread.start () ؛
في المثال أعلاه ، لم نكتب رمز التشغيل للمعلومات ، لذلك ينتهي مؤشر الترابط بعد استدعاء الطريقة.
هناك طريقتان لكتابة الكود الذي يتم تنفيذه عند تشغيل مؤشر ترابط: أحدهما هو إنشاء مثيل من الفئة الفرعية مؤشر ترابط وتجاوز طريقة التشغيل ، والثاني هو تنفيذ الواجهة القابلة للتشغيل عند إنشاء الفئة. بعد ذلك سنشرح هاتين الطريقتين بالتفصيل:
إنشاء فئة فرعية من الموضوع
قم بإنشاء مثيل من الفئة الفرعية لخيط وتجاوز طريقة التشغيل. سيتم تنفيذ طريقة التشغيل بعد استدعاء طريقة START (). يمكن إنشاء مثال الفئة الفرعية لخيط المواضيع أعلاه وتشغيله بالطريقة التالية:
الطبقة العامة myThread يمتد Thread {public void run () {system.out.println ("MyThread Running") ؛ }} mythread myThread = new MyThread () ؛ mytread.start () ؛بمجرد بدء تشغيل الخيط ، ستعود طريقة البدء على الفور ، ولن تنتظر حتى يتم تنفيذ طريقة التشغيل قبل العودة. إنه مثل طريقة التشغيل يتم تنفيذها على وحدة المعالجة المركزية أخرى. عند تنفيذ طريقة التشغيل ، سيتم طباعة السلسلة myThread.
يمكنك أيضًا إنشاء فئة فرعية مجهولة المصدر من الخيط على النحو التالي:
Thread Thread = New Thread () {public void run () {system.out.println ("Thread Running") ؛ }} ؛ thread.start () ؛عند تنفيذ طريقة تشغيل الخيط الجديد ، سيقوم الكمبيوتر بطباعة السلسلة "تشغيل مؤشر الترابط".
تنفيذ الواجهة القابلة للتشغيل
تتمثل الطريقة الثانية لكتابة رمز تنفيذ مؤشرات الترابط في إنشاء مثيل جديد للفئة التي تنفذ واجهة java.lang.runnable ، ويمكن استدعاء الطرق في المثيل بواسطة مؤشر الترابط. ما يلي مثال:
الطبقة العامة myrunnable الأدوات runnable {public void run () {system.out.println ("myrunnable running") ؛ }}من أجل تنفيذ مؤشرات الترابط طريقة Run () ، من الضروري تمرير كائن المثيل لـ MyRunnable إلى مُنشئ فئة الخيط. الأمثلة على النحو التالي:
موضوع الموضوع = مؤشر ترابط جديد (جديد myRunnable ()) ؛
thread.start () ؛
عند تشغيل مؤشر الترابط ، سيتصل طريقة التشغيل التي تنفذ الواجهة القابلة للتشغيل. سيتم طباعة "MyRunnable Running" في المثال أعلاه.
وبالمثل ، يمكنك إنشاء فئة مجهولة المصدر تنفذ الواجهة القابلة للتشغيل ، كما هو موضح أدناه:
RunNable MyRunnable = new RunNable () {public void run () {system.out.println ("RunNable Running") ؛ }} thread thread = new thread (myrunnable) ؛ thread.start () ؛إنشاء فئة فرعية أو تنفيذ واجهة قابلة للتشغيل؟
لا توجد إجابة محددة على أي من هاتين الطريقتين أفضل ، ويمكنهما تلبية المتطلبات. في رأيي الشخصي ، أفضل تنفيذ طريقة الواجهة القابلة للتشغيل. نظرًا لأن تجمع مؤشرات الترابط يمكنه إدارة مؤشرات الترابط بفعالية التي تنفذ الواجهة القابلة للتشغيل ، إذا كان تجمع مؤشرات الترابط ممتلئًا ، فسيقوم مؤشرات الترابط الجديدة بإعداد تنفيذ حتى يكون تجمع مؤشرات الترابط الخمول. وإذا تم تنفيذ مؤشر الترابط عن طريق تطبيق الفئة الفرعية لخيط ، فسيكون ذلك أكثر تعقيدًا.
في بعض الأحيان ، نحتاج إلى دمج طريقتين لتنفيذ واجهة Runnable والفئة الفرعية لخيط الخيط في نفس الوقت. على سبيل المثال ، يمكن للمثيل الذي ينفذ فئة فرعية مؤشر ترابط تنفيذ مؤشرات ترابط متعددة تنفذ واجهة Runnable. التطبيق النموذجي هو تجمع الخيوط.
خطأ شائع: استدعاء طريقة Run () بدلاً من طريقة START ()
هناك خطأ شائع من خلال إنشاء وتشغيل مؤشر ترابط هو استدعاء طريقة Run () الخاصة بالمعلومات بدلاً من طريقة START () ، كما هو موضح أدناه:
موضوع newThread = موضوع جديد (myrunnable ()) ؛
newthread.run () ؛ // يجب أن يكون start () ؛
في البداية ، لا تشعر بأي شيء خاطئ ، لأن طريقة التشغيل () تسمى بالفعل كما يحلو لك. ومع ذلك ، في الواقع ، لا يتم تنفيذ طريقة Run () بواسطة مؤشر الترابط الجديد الذي تم إنشاؤه للتو ، ولكن يتم تنفيذه بواسطة مؤشر الترابط الحالي الذي أنشأ مؤشر الترابط الجديد. وهذا هو ، يتم تنفيذه بواسطة مؤشر الترابط الذي ينفذ خطين أعلاه من الكود. لجعل مؤشر ترابط جديد تم إنشاؤه تنفيذ طريقة Run () ، يجب استدعاء طريقة بدء مؤشر الترابط الجديد.
اسم الموضوع
عند إنشاء مؤشر ترابط ، يمكنك إعطاء موضوع اسم. يساعدنا في التمييز بين المواضيع المختلفة. على سبيل المثال: إذا تمت كتابة مؤشرات ترابط متعددة إلى System.out ، فيمكننا بسهولة معرفة الخيط الذي يتم إخراجه من خلال اسم مؤشر الترابط. الأمثلة على النحو التالي:
myRunnable Runnable = new myrunnable () ؛ مؤشر ترابط الخيط = مؤشر ترابط جديد (RunNable ، "new thread") ؛ thread.start () ؛ system.out.println (thread.getName ()) ؛
تجدر الإشارة إلى أنه نظرًا لأن MyRunnable ليس فئة فرعية من الخيط ، فإن الفئة MyRunnable لا تحتوي على طريقة getName (). يمكنك الحصول على إشارة إلى الخيط الحالي بالطرق التالية:
thread.currentThRead () ؛
string threadname = thread.currentThRead (). getName () ؛
مثال رمز الموضوع:
هنا مثال صغير. أولا ، إخراج اسم مؤشر الترابط للطريقة الرئيسية (). يتم تخصيص هذا الموضوع بواسطة JVM. ثم افتح 10 مؤشرات ترابط وتسميتها 1 ~ 10. كل موضوع يخرج بعد إخراج اسمه الخاص.
الفئة العامة threadexample {public static void main (string [] args) {system.out.println (thread.currentThread (). getName ()) ؛ لـ (int i = 0 ؛ i <10 ؛ i ++) {new thread ("" + i) {public void run () {system.out.println ("thread:" + getName () + "running") ؛ } }.يبدأ()؛ }}}تجدر الإشارة إلى أنه على الرغم من ترتيب ترتيب سلسلة بدء التشغيل ، فإن ترتيب التنفيذ لا يتم طلبه. وهذا يعني أن الموضوع 1 ليس بالضرورة الخيط الأول الذي يخرج اسمه إلى وحدة التحكم. وذلك لأن المواضيع يتم تنفيذها بالتوازي بدلاً من التسلسل. تحدد JVM ونظام التشغيل ترتيب تنفيذ مؤشرات الترابط ، وترتيب بدء التشغيل الخاص به ليس بالضرورة هو نفسه ترابط المواضيع.
ما سبق هو مجموعة من المعلومات التي أنشأتها خيوط Java. سنستمر في إضافة المعلومات ذات الصلة في المستقبل. شكرا لدعمكم لهذا الموقع!