4

私は既存のコードに取り組んでおり、クラスの1つでこのコードを見つけました。コードはExecutorService、を実行する代わりにを使用していMyThread.startます。

ExecutorServiceの代わりに使用する理由を教えてくださいThread.start

protected static ExecutorService executor = Executors.newFixedThreadPool(25);

while (!reader.isEOF()) {
    String line = reader.readLine();
    lineCount++;
    if ((lineCount > 1) && (line != null)) {
        MyThread t = new MyThread(line, lineCount);
        executor.execute(t);
    }
}
4

1 に答える 1

5

MyThread拡張ThreadしてThread実装すると思いますRunnable。そのコードで実行しているのは、ランナブルをエグゼキュータに送信することです。エグゼキュータは、25のスレッドの1つでランナブルを実行します。

それとスレッドを直接開始することの主な違いは、myThread.start()10k行がある場合、これは10kスレッドを同時に開始する可能性があることです。これにより、リソースがすぐに使い果たされる可能性があります。

エグゼキュータが定義されている場合、常に実行されるスレッドは25を超えないため、25のスレッドすべてがすでに使用されている間にタスクが送信されると、スレッドの1つが再び使用可能になるまで待機し、そのスレッドで実行されます。 。

于 2012-11-29T19:31:51.547 に答える