logo

ממשק הפעלה Java

java.lang.Runnable הוא ממשק שאמור להיות מיושם על ידי מחלקה שהמופעים שלה מיועדים לביצוע על ידי שרשור. ישנן שתי דרכים להתחיל שרשור חדש - שרשור משנה וליישם Runnable. אין צורך לסווג משנה של Thread כאשר ניתן לבצע משימה על ידי ביטול רק של לָרוּץ() שיטת Runnable. 

שלבים ליצירת שרשור חדש באמצעות Runnable 

  1. צור מיישם שניתן להרצה והטמיע את שיטת run() . 
  2. הפעל את המחלקה Thread והעביר את המיישם ל-Thread Thread יש בנאי שמקבל מופעים ניתנים להרצה.
  3. 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 באופן אוטומטי.

צור חידון