5

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

4

4 回答 4

7

启动线程肯定会涉及开销。您可能需要考虑线程池。

http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html

于 2013-06-17T16:39:01.510 回答
2

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

有多种选择:

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

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

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

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

执行者的优势Thread.start()

  • 重用已有线程,所以不会每次提交任务都创建线程
  • 线程管理由执行者完成
于 2013-06-17T16:41:11.557 回答
2

Thread.start是本地人。它所做的不仅仅是调用run——它使用操作系统调用来创建线程堆栈和许多其他事情。考虑使用Thread Pool.

于 2013-06-17T16:39:50.390 回答
2

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

new Thread(runnableObj).start();

每次调用start()方法时都会创建新的线程。

如果您不想在运行业务逻辑时花费额外的时间来创建线程,请使用Executors 。您可以在应用程序启动时配置和创建线程池。

Executors的一个很好的简短教程

于 2013-06-17T16:43:28.997 回答