有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何确定线程池中的线程数

在JavaWeb项目中,用户将任务发送到web。为了处理这些任务,我使用一个包含10个线程的线程池来处理它们的任务。每个任务都将构建到一个线程并发送到线程池。线程池被设计为一个静态变量,这意味着所有任务(线程)共享同一个线程池
今天,200名用户来到我的网站,然后,他们抱怨他们的任务运行得非常慢

  • 静态线程池中的线程是否太少?也许号码应该是30?50 ?
  • 也许我不应该使用静态线程池
  • 也许我不应该使用线程池,因为有很多任务,我可以只taskThread.start()

共 (1) 个答案

  1. # 1 楼答案

    通常,您会计算出处理的IO绑定程度以及可用的内核数量。完美的公式是:

    number_of_cores*(1/cpu_sticky)
    

    其中cpu_sticky介于0和1之间。所以如果你认为这是一个非常重要的问题, cpu_粘性非常低(比如说.1),而cpu密集度高的系统有很高的cpu_粘性(比如.9)

    但最有可能的情况是,代码需要长时间的数据库搜索,即锁定数据库中一行或多行的搜索,因此一个或多个线程需要等待完成。在这种情况下,我们有很多线程,但每个线程仍然很慢