java.lang.Runnable は、スレッドによって実行されるインスタンスを持つクラスによって実装されるインターフェイスです。新しいスレッドを開始するには、スレッドをサブクラス化する方法と Runnable を実装する方法の 2 つがあります。タスクをオーバーライドするだけで実行できる場合は、スレッドをサブクラス化する必要はありません。 走る() ランナブルのメソッド。
Runnable を使用して新しいスレッドを作成する手順
- Runnable インプリメンタを作成し、run() メソッドを実装します。
- Thread クラスをインスタンス化し、実装者を Thread に渡します。 Thread には、Runnable インスタンスを受け入れるコンストラクターがあります。
- 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!
説明: 出力には、プログラム内の 2 つのアクティブなスレッド (メイン スレッドと Thread-0) が示されています。メイン メソッドはメイン スレッドによって実行されますが、RunnableImpl で start を呼び出すと、新しいスレッド (Thread-0) が作成され、開始されます。
jボタン
ランナブルでの例外の処理
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 がチェック例外をスローできないことを示しています ファイルが見つかりません例外 この場合、呼び出し元に対して run() でチェックされた例外を処理する必要がありますが、RuntimeExceptions (スローまたは自動生成) は JVM によって自動的に処理されます。
クイズの作成