Runnable
インターフェイスを使用してスレッドを作成するときに、実行可能なインスタンスを渡す必要があるのはなぜですか?
2 に答える
実行可能オブジェクトをスレッドオブジェクトのコンストラクターに渡す必要がある理由はrun()
、スレッドに実行させたいメソッドに到達するための何らかの方法がスレッドに必要だからです。
例を取る
public class CustomApplet extends Applet {
public void init() {
Runnable ot = new OurClass();
Thread th = new Thread(ot);
th.start();
}
}
Threadクラスのメソッドをオーバーライドしなくなったためrun()
、Threadクラスのデフォルトのrun()
メソッドが実行されます。このデフォルトrun()
のメソッドは次のようになります
public void run() {
if (ot!= null) {
ot.run();
}
}
したがって、ot
スレッドのコンストラクターに渡した実行可能オブジェクトです。したがって、スレッドはThreadクラスのメソッドで実行を開始します。このクラスは、実行可能なオブジェクトのメソッドrun()
をすぐに呼び出します。run()
新しいスレッドに何をさせたいですか?あなたはおそらくそれがいくつかのコードを実行することを望みます。しかし、どのコードを実行する必要がありますか?コードをスレッドに入れることはできません。また、Javaには関数ポインタがありません。この問題を解決するためのちょっとしたコツは、関数を実装するオブジェクトを使用することです。その関数はrun
です。したがって、オブジェクトにはrun
メソッドが必要です。これがRunnableインターフェースの機能であり、runメソッドがあることを確認してください。したがって、Runnableオブジェクトを指定すると、スレッドは何をすべきかを認識します。