提高Java中的线程启动性能

5

有没有办法提高Thread.start方法的性能。我知道Thread.start会在一个单独的线程中调用线程的run方法,但我发现它需要比在调用上下文中简单方法调用更多的时间。


减小线程堆栈大小可能会带来一些小的改进... - Affe
1
通过使用线程池(如@pamphet建议的)或通过向运行循环等待(例如P-C队列)的专用线程发出信号,使Thread.start变得无关紧要。 - Martin James
1
感谢所有线程池的支持,使性能提升了7倍。 - Mohammed Falha
4个回答

7

2

Thread.start是本地方法。它不仅仅调用run方法,还使用操作系统调用来创建线程堆栈和其他很多东西。考虑使用线程池


2

启动线程、上下文切换和销毁线程都需要宝贵的CPU周期。因此最好使用适合您要求的线程池

有各种选项可用:

  • 缓存线程池 - 缓存一些线程以提高性能

  • 单线程池执行器 - 单个线程执行器

  • 固定大小线程池执行器 - 具有固定大小的执行器

根据您的硬件配置和其他参数创建n个线程可以减少切换。

执行器优于Thread.start()的优点:

  • 重用现有线程,因此不会在每次提交任务时创建线程
  • 线程管理由执行器完成

2

线程的创建总是需要时间的。传统的方法

new Thread(runnableObj).start();

每次调用 start() 方法时都会创建一个新的 Thread
如果你不想在业务逻辑运行时额外花费时间来创建线程,可以使用 Executors。当应用程序启动时,您可以配置和创建 Thread Pools
这里有一个关于Executors的好短教程:链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接