7
Thread t = new Thread(new Runnable() { public void run() {} });

こんな感じでスレッドを立てたいと思います。run可能であれば、メソッドにパラメーターを渡すにはどうすればよいですか?

編集:私の問題を具体的にするために、次のコードセグメントを検討してください:

for (int i=0; i< threads.length; i++) {
    threads[i] = new Thread(new Runnable() {public void run() {//Can I use the value of i in the method?}});
}

iとして宣言されていないため、ジョンの答えに基づいて、それは機能しませんfinal

4

2 に答える 2

10

いいえ、runメソッドにパラメータはありません。初期状態をに入れる必要がありますRunnable。匿名の内部クラスを使用している場合は、最後のローカル変数を介してそれを行うことができます。

final int foo = 10; // Or whatever

Thread t = new Thread(new Runnable() {
    public void run() {
        System.out.println(foo); // Prints 10
    }
});

名前付きクラスを作成している場合は、クラスにフィールドを追加して、コンストラクターに入力します。

java.util.concurrentあるいは、あなたはもっとあなたを助けるクラスを見つけるかもしれません(ExecutorServiceなど)-それはあなたが何をしようとしているのかに依存します。

編集:上記をコンテキストに組み込むには、ループ内に最後の変数が必要です。

for (int i=0; i< threads.length; i++) {
    final int foo = i;
    threads[i] = new Thread(new Runnable() {
         public void run() {
             // Use foo here
         }
    });
}
于 2012-12-17T08:19:25.300 に答える
4

パラメータを受け入れるカスタム スレッド オブジェクトを作成できます。たとえば、次のようになります。

public class IndexedThread implements Runnable {
    private final int index;

    public IndexedThread(int index) {
        this.index = index;
    }

    public void run() {
        // ...
    }
}

次のように使用できます。

IndexedThread threads[] = new IndexedThread[N];

for (int i=0; i<threads.length; i++) {
    threads[i] = new IndexedThread(i);
}
于 2012-12-17T08:36:26.870 に答える