0

わかりました、タイトルの言葉遣いは少し奇妙ですが、私はそれを表現する方法を本当に知りませんでした. 基本的に、Java とスレッドについて私が理解していることは、スレッドを作成し、実行し、終了するということです。ただし、スレッド OBJECT はまだ存在します。このようなことが有効かどうか知りたいこと

int numWorkers = Integer.parseInt(args[0]);
int threadPoolSize = Integer.parseInt(args[1]);
ExecutorService tpes = Executors.newFixedThreadPool(threadPoolSize);
WorkerThread[] workers = new WorkerThread[numWorkers];
while(some condition)    
    for (int i = 0; i < numWorkers; i++) {
        workers[i] = new WorkerThread(i, *some changing parameters*);
        tpes.execute(workers[i]);
    }

基本的に、この状況とは、いつ満たされるかわからない条件があるということです。私が8つのスレッドを使用しているとしましょう。私は 8 つのスレッドすべてを作成します。私は彼らの結果をまとめ、まだ終わっていないことに気づきました。ただし、たとえば、workers[0] は既に存在します。新しい WorkerThread() 呼び出しで作成しました。しかし、実行が完了したため、現在は死んでいます。再び呼び出す場合、worker[0] = new WorkerThread(0, new parameter )...それは許可されますか? もっと多くのスレッドが必要です。すでに (現在) デッド スレッドの配列があります...別のスレッドを指すようにできますか? 古いスレッドは GC によって適切に収集されますか?

4

1 に答える 1

5

まず最初に、Executor Service にスレッドを送信しません。を実装する単なるオブジェクトであるタスクを送信しますrun。エグゼキュータ サービスは、スレッド プールを完全に制御します。

Runnable同じことを何度でも簡単にスケジュールでき、そのたびFutureTaskに、完了したかどうかを通知し、キャンセルできる別のオブジェクトを受け取ります。これらのFutureTaskオブジェクトは再利用できませんが、問題ありません。

于 2012-10-28T17:05:44.607 に答える