在Java中创建新线程有多贵?我们什么时候应该考虑使用线程池?

Rom*_*man 5 java performance multithreading threadpool

我想知道应该使用线程池的边缘在哪里.我可以在不使用线程池的情况下每秒创建多少个新线程,仍然可以避免明显的性能损失?

是否有任何可观察的开源线程池实现?

Rid*_*del 5

考虑到成本,唯一有效的回答是自己测试(不太优雅的方式告诉你我从来没有做过这样的测试,也永远不会做,因为现代执行机制提供了非常先进的创建/销毁机制) .

考虑到现有的实现,Java 现代版本(从 Java 5 开始)提供了ThreadPoolExecutor 的各种子类,这些子类结合了线程池的优点和最现代的 java.util.concurrent 概念:Executors。

此外,我永远不会建议你忘记线程并用 Runnable、callable 和其他更高级的计算对象来代替它们。这样,您可以轻松切换 Executors 的实现。


Chr*_*ail 5

您应该始终使用线程池.不仅仅是为了性能,而且为了易用性,java.util.concurrent包为您提供.使用Java 5及更高版本,内置了线程池.

不要考虑"线程",而是使用Executor接口来执行您需要执行的任务.创建新的线程池非常简单:

Executor executor = Executors.newFixedThreadPool(5);
Run Code Online (Sandbox Code Playgroud)

有关java.util.concurrent包的完整文档,请访问:http: //java.sun.com/javase/6/docs/api/java/util/concurrent/package-frame.html