0

インターフェイスを実装するクラスRunnableがあり、メイン プログラムで特定のクラスの 5 つのインスタンスを作成するとします。それらを配列またはコレクションに保存したいと思います。クラスが実装Runnableしているので、それを格納できる唯一の方法はThread[]. ただし、これを行うとtoString()、たとえばクラスのオーバーライドされたメソッドや、他のカスタム メソッド/フィールドを使用できなくなります。

public class LittleClass implements Runnable{
    public void run(){

    }
}

public static void main(String[] args){
    Thread[] smallClasses = new Thread[5];

    // initialize and so...

    smallClasses[i].customField//not accessible
    System.out.println(smallClasses[i])//gives Thread[Thread-X,X,]
}
4

2 に答える 2

2

の使用を検討する必要がありExecutorServiceます。次に、ジョブ クラスの配列を保持し、それらをサービスに送信して実行します。

// create a thread pool with as many workers as needed
ExecutorService threadPool = Executors.newCachedThreadPool();
// submit your jobs which should implements Runnable
for (YourRunnable job : jobs) {
    threadPool.submit(job);
}

ジョブを送信したら、サービスをシャットダウンし、サービスが終了するのを待ってから、ジョブに問い合わせてジョブから情報を取得できます。

// shuts the pool down but the submitted jobs still run
threadPool.shutdown();
// wait for all of the jobs to finish
threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
// now go back and print out your jobs
for (YourRunnable job : jobs) {
    System.out.println(jobs.toString());
}

これは、このテーマに関する優れたチュートリアルです。

于 2013-04-01T21:34:07.990 に答える