动态计算分配及获取线程数

有时我们处理一个耗时的运算,就必须开启线程处理,如果运算数量非常庞大,每个运算都开启一个线程,这里做了太多无用功,会造成CPU负荷
内存暴涨,尤其是移动端,内存和cpu资源是极其宝贵的,合理的做法是,智能给运算分组,每组运算交给一个线程处理。那这样一来就需要一个小算法。下面给出了算法逻辑。calculateThreadNum获得需要分配的线程数,isOpenThreadNum控制是否需要创建线程。

/**
* 计算线程个数,根据运算总数和线程单位处理数,计算线程个数
* @param totalSize 运算总数
* @param disThreadNum 每层分配线程数
* @return
*/
private int calculateThreadNum(int totalSize, int disThreadNum) {

    int threadNum = 0; //线程数量
    int iThread = totalSize / disThreadNum;
    int mThread = totalSize % disThreadNum;
    if(totalSize >= 0) {            
        if(mThread > 0) {
            threadNum = iThread + 1;
            return threadNum;
        } else {
            return iThread;
        }
    } else {
        return -1; //异常,整数必须大于等于0
    }
}


/**
 * 动态分配线程。根据运算总数和线程单位处理数动态分配线程个数
 * @param totalSize 运算总数
 * @param disThreadNum 单位线程处理运算个数
 * @param 运算索引数
 * @return
 */
private static boolean isOpenThreadNum(int totalSize, int disThreadNum, int index) {

    if(totalSize > 0) {
        if(totalSize <= disThreadNum) {
            if(totalSize == index) {
                return true;
            }
        } else {
            if(index < totalSize) {
                if(index % disThreadNum == 0) {
                    return true;
                }
            } else if(index == totalSize) {
                return true;
            }
            return false;
        }
    }
    return false;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值