我最近继承了一个小型Java程序,它从大型数据库中获取信息,进行一些处理并生成有关信息的详细图像.原作者使用单个线程编写代码,然后对其进行修改以允许它使用多个线程.
在代码中他定义了一个常量;
// number of threads
public static final int THREADS = Runtime.getRuntime().availableProcessors();
Run Code Online (Sandbox Code Playgroud)
然后设置用于创建映像的线程数.
我理解他的理由是线程数不能大于可用处理器的数量,因此将其设置为从处理器中获取全部潜力的数量.它是否正确?或者是否有更好的方法来充分利用处理器的潜力?
编辑:为了进一步澄清,正在线程化的特定算法会扩展到正在创建的图片的分辨率(每个像素1个线程).这显然不是最好的解决方案.该算法所做的工作是一直需要的工作,并且是完全数学运算,没有锁或其他因素会导致任何给定的线程休眠.我只想最大化程序CPU利用率,以减少完成时间.