java.lang.Runnable הוא ממשק שאמור להיות מיושם על ידי מחלקה שהמופעים שלה מיועדים לביצוע על ידי שרשור. ישנן שתי דרכים להתחיל שרשור חדש - שרשור משנה וליישם Runnable. אין צורך לסווג משנה של Thread כאשר ניתן לבצע משימה על ידי ביטול רק של לָרוּץ() שיטת Runnable.
שלבים ליצירת שרשור חדש באמצעות Runnable
- צור מיישם שניתן להרצה והטמיע את שיטת run() .
- הפעל את המחלקה Thread והעביר את המיישם ל-Thread Thread יש בנאי שמקבל מופעים ניתנים להרצה.
- Invoke start() של מופע 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 שיטת ראשי מבוצעת על ידי ה-Main thread אך הפעלת ההתחלה ב- RunnableImpl יוצרת ומתחילה שרשור חדש - Thread-0.
שלילת מתמטיקה בדידה
טיפול חריג ב- Runnable
ממשק בר הפעלה לא יכול לזרוק חריג מסומן אבל ניתן לזרוק RuntimeException מה-run(). חריגים שלא נתפסו מטופלים על ידי מטפל החריגים של השרשור אם JVM לא יכול לטפל או לתפוס חריגים זה מדפיס את מעקב המחסנית ומסיים את הזרימה.
דוּגמָה:
רשימת הדתותjava
// 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 במקרה זה למתקשרים הוא חייב לטפל בחריגים מסומנים ב-run() אך RuntimeExceptions (שנזרק או נוצר אוטומטי) מטופלים על ידי ה-JVM באופן אוטומטי.
צור חידון