4

我正在处理现有代码,我在其中一个类中找到了这段代码。代码是使用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扩展ThreadThread实现Runnable. 您在该代码中所做的是将 Runnable 提交给执行程序,执行程序将在其 25 个线程之一中执行它。

这与直接启动线程之间的主要区别在于myThread.start(),如果您有 10k 行,这可能会同时启动 10k 个线程,这可能会很快耗尽您的资源。

使用定义的执行器,任何时候都不会超过 25 个线程运行,因此如果在所有 25 个线程都已使用的情况下提交任务,它将等待直到其中一个线程再次可用并在该线程中运行.

于 2012-11-29T19:31:51.547 回答