2016 - 2024

感恩一路有你

java是什么 java多线程ExecutorService线程数量?

浏览量:1248 时间:2021-04-14 17:18:59 作者:admin

java多线程ExecutorService线程数量?

新增了一个Executors工厂类产生线程池,如下面几个方法

- public static ExecutorService newFixedThreadPool(int nThreads)

- public static ExecutorService newSingleThreadExecutor()这些方法的返回值是ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。它提供了如下方法:

- Future<?> submit(Runnable task)

- <T> Future<T> submit(Callable<T> task)

大家如何估算线程池数量?

线程池的大小对系统的性能有一定的影响,过大或者过小的线程数量都无法发挥最优的系统性能,但是线程池大小的确定也不需要做的非常精确。因为只要避免极大和极小两种情况,线程池的大小对性能的影响都不会影响太大,一般来说,确定线程池的大小需要考虑CPU数量,内存大小等因素,在《Java Concurrency in Practice》 书中给出了一个估算线程池大小的经验公式:

公式:Nthread = Ncpu * Ucpu * (1 W/C),各字段含义:

  • Nthreads:线程数量

  • Ncpu:CPU的数量,Runtime.getRuntime().availableProcessors()

  • Ucpu:CPU使用率,范围在[0,1]

  • W/C:等待时间与计算时间的比率

其实就是要分清是计算密集型还是IO密集型。

如果是C无限大也就是计算密集型的那么线程太多意义不大,因为需要CPU计算,起多了也没用。

如果是IO密集型那么可以起更多的线程,因为等待时间过多。

简单总结就是:IO密集多线程,计算密集线程=CPU核数比较合适。

欢迎关注笔者,持续分享有价值的优质架构文章。

java什么是线程池及为什么要使用线程池?

创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,Java API提供了Executor框架让你可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池(一个适合很多生存期短的任务的程序的可扩展线程池)。

java是什么 java web java 线程池

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。