わかりやすい説明では、Javaで実行可能とは何ですか?[閉まっている]


92

素人の言葉で、Javaで「実行可能」とは何ですか?私は高校のAPプログラミング学生です。その割り当ては、研究を行うか、「実行可能」が何であるかを他の人から探し出します(まだOOPに入っており、まだスレッドに触れていません)。


APIドキュメントには便利な行が1つだけあります。「メソッド実行の一般的な規約は、あらゆるアクションを実行できるということです。」
トム・ホーティン-12

はるかに興味深い研究課題は、Javaで「止められる」とは、素人の言葉で言えば何でしょう。今日のインストラクターはそうです...
Udo Klimaschewski

8
@UdoKlimaschewski -男はある高校の生徒ではなく、学部や大学院の学生。このインストラクターの期待は、学生のレベルに比例しています... IMO。ただし、「最初の質問」はOPのレベルの誰かにとって適切な研究手法ではないことに同意します。
スティーブンC

回答:


188

Runnableは、基本的にはスレッドに入れることができるクラスのタイプ(Runnableはインターフェース)であり、スレッドが実行することを説明しています。

、Runnableインタフェースには、メソッドを実装するクラスの必要がありrun()そうのように:

public class MyRunnableTask implements Runnable {
     public void run() {
         // do stuff here
     }
}

そして、次のように使用します。

Thread t = new Thread(new MyRunnableTask());
t.start();

Runnableインターフェースがなかった場合、他のスレッドでの実行を担当するThreadクラスは、クラス内でrun()メソッドを見つける約束がないため、エラーが発生する可能性があります。そのため、インターフェースを実装する必要があります。

上級:匿名型

通常のようにクラスを定義する必要がないことに注意してください。そのすべてをインラインで行うことができます。

Thread t = new Thread(new Runnable() {
    public void run() {
        // stuff here
    }
});
t.start();

これは上記に似ていますが、別の名前付きクラスは作成しません。


67
これは、「現在の形では合理的に回答できない」という主張を完全に否定する素晴らしい回答です。
Russell Silva

1
久しぶりのことですが、質問があります。スレッドは1回だけ実行されますか、それともスレッドを開始したときにプログラム内で何度も実行され続けますか?
gamo 2014年

5
スレッドはrunメソッドが終了するまで実行され、その後スレッドが閉じられます。スレッドを繰り返し実行する場合は、runメソッド内にループを配置します。
opatut 2014年

2
それとも単にJavaの8ラムダ関数を使用して:new Thread(() -> System.out.println("hello from other thread")).start();
ゲイブ

9

Runnable そのように定義されたインターフェースです:

interface Runnable {
    public void run();
}

それを使用するクラスを作成するには、クラスを次のように定義するだけです (public) class MyRunnable implements Runnable {

新しいスレッドを作成することなく使用できます。基本的には、実行可能な単一のメソッドrunを持つ基本的なインターフェースです。

パラメータとしてrunnableを使用して新しいスレッドを作成すると、新しいスレッドでrunメソッドが呼び出されます。

スレッドはを実装しRunnable、新しいスレッドが(新しいスレッドで)作成されるときに呼び出されることにも注意してください。デフォルトの実装では、コンストラクターで渡したRunnableを呼び出すだけなのでnew Thread(someRunnable)、Threadのrunメソッドをオーバーライドせずに実行できます。


スレッドの継承とRunnableの実装に基本的に違いはないと言っていますか?Runnableを使用するときのThreadは、ラッパーとして使用されているだけでなく、エグゼキューターでもありますか?
opatut

[Threadの拡張とrunのオーバーライド]と[同じrunメソッドを持つrunnableを使用してThreadの新しいインスタンスを作成する]には違いがないと言っています
Alex Coleman

うん、わかった。しかし、実際に違いはなく、パフォーマンスもそうでないのですか?
2012

3
@AlexColeman- 大きな違いがあります。Threadスレッドプーリングを拡張することが困難で、スレッドプーリングを実装しない場合は、常に新しいスレッドを作成するという多大なコストがかかります。対照的に、実装RunnableするだけでThreadPoolExecutorService、サードパーティのスレッドプールなどを簡単に使用できます。
スティーブンC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.