有没有办法提高 Thread.start 方法的性能。我知道 Thread.start 将在单独的线程中调用tread的运行方法,但我发现它比调用上下文中的简单方法调用需要更多时间。
问问题
3201 次
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 回答