java.lang.Runnable هي واجهة سيتم تنفيذها بواسطة فئة تم تصميم مثيلاتها للتنفيذ بواسطة مؤشر ترابط. هناك طريقتان لبدء موضوع جديد - موضوع فئة فرعية وتنفيذ Runnable. ليست هناك حاجة إلى فئة فرعية لسلسلة رسائل عندما يمكن تنفيذ المهمة عن طريق تجاوز فقط يجري() طريقة قابلة للتشغيل.
خطوات إنشاء موضوع جديد باستخدام Runnable
- قم بإنشاء مُنفذ قابل للتشغيل وقم بتنفيذ طريقة التشغيل ().
- قم بإنشاء مثيل لفئة Thread وتمرير المنفذ إلى Thread. يحتوي مؤشر الترابط على مُنشئ يقبل المثيلات القابلة للتشغيل.
- استدعاء start() لمثيل مؤشر الترابط يبدأ داخليًا باستدعاء run() للمنفذ.
- يؤدي استدعاء start() إلى إنشاء مؤشر ترابط جديد ينفذ التعليمات البرمجية المكتوبة في run().
- لا يؤدي استدعاء run() مباشرةً إلى إنشاء وبدء موضوع جديد، بل سيتم تشغيله في نفس الموضوع.
- لبدء سطر جديد من التنفيذ، قم باستدعاء start() على مؤشر الترابط.
مثال:
java// Runnable Interface Implementation public class Geeks { private class RunnableImpl implements Runnable { // Overriding the run Method @Override public void run() { System.out.println(Thread.currentThread().getName() + ' executing run() method!'); } } // Main Method public static void main(String[] args) { System.out.println('Main thread is: ' + Thread.currentThread().getName()); // Creating Thread Thread t1 = new Thread(new Geeks().new RunnableImpl()); // Executing the Thread t1.start(); } }
الإخراج
Main thread is: main Thread-0 executing run() method!
توضيح: يُظهر الإخراج خيطين نشطين في البرنامج - يتم تنفيذ الخيط الرئيسي والطريقة الرئيسية لـ Thread-0 بواسطة الخيط الرئيسي ولكن استدعاء البداية على RunnableImpl يؤدي إلى إنشاء وبدء موضوع جديد - Thread-0.
جافا التالي
التعامل مع الاستثناء في Runnable
لا يمكن للواجهة القابلة للتشغيل أن تطرح الاستثناء المحدد ولكن يمكن طرح RuntimeException من التشغيل (). تتم معالجة الاستثناءات التي لم يتم اكتشافها بواسطة معالج الاستثناء الخاص بمؤشر الترابط، إذا لم يتمكن JVM من معالجة الاستثناءات أو التقاطها، فإنه يطبع تتبع المكدس وينهي التدفق.
مثال:
dijkstrajava
// Checking Exceptions in Runnable Interface import java.io.FileNotFoundException; public class Geeks { private class RunnableImpl implements Runnable { // Overriding the run method @Override public void run() { System.out.println(Thread.currentThread().getName() + ' executing run() method!'); // Checked exception can't be thrown Runnable must // handle checked exception itself try { throw new FileNotFoundException(); } catch (FileNotFoundException e) { System.out.println('Must catch here!'); e.printStackTrace(); } int r = 1 / 0; // Below commented line is an example // of thrown RuntimeException. // throw new NullPointerException(); } } public static void main(String[] args) { System.out.println('Main thread is: ' + Thread.currentThread().getName()); // Create a Thread Thread t1 = new Thread(new Geeks().new RunnableImpl()); // Running the Thread t1.start(); } }
الإخراج:
Thread-0 executing run() method!
Must catch here!
java.io.FileNotFoundException
at RunnableDemo$RunnableImpl.run(RunnableDemo.java:25)
at java.lang.Thread.run(Thread.java:745)
Exception in thread 'Thread-0' java.lang.ArithmeticException: / by zero
at RunnableDemo$RunnableImpl.run(RunnableDemo.java:31)
at java.lang.Thread.run(Thread.java:745)
توضيح : يُظهر الإخراج أن Runnable لا يمكنه طرح الاستثناءات المحددة FileNotFoundException في هذه الحالة، يجب على المتصلين معالجة الاستثناءات المحددة في التشغيل () ولكن تتم معالجة استثناءات RuntimeExceptions (التي تم طرحها أو إنشاؤها تلقائيًا) بواسطة JVM تلقائيًا.
إنشاء اختبار