java中thread执行mapper service方法

废话没有直接上demo,就是撸!
thread类如下:

package com.zdmoney.credit.service.suanhua.impl;

import com.zdmoney.credit.common.util.SpringContextUtil;
import com.zdmoney.credit.dao.framework.ShCreaditPlm7020Mapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Author: zhangjiachen
 * @Date: 2018/10/18 19:29
 * @Description:
 */
public class SuanHuaPlm7020Thread implements Runnable {

    private static Logger logger = LoggerFactory.getLogger(SuanHuaPlm7020Thread.class);


    private ShCreaditPlm7020Mapper shCreaditPlm7020Mapper = (ShCreaditPlm7020Mapper) SpringContextUtil.getBean
            ("shCreaditPlm7020Mapper");

    private String startNumber;
    private String endNumber;
    private String clienPort;

    public SuanHuaPlm7020Thread(String startNumber, String endNumber, String clienPort) {
        this.startNumber = startNumber;
        this.endNumber = endNumber;
        this.clienPort = clienPort;
    }

    @Override
    public void run() {
        logger.info("线程:" + Thread.currentThread().getName() + "开始执行!" + "clienPort=" + clienPort +
                "startNumber=" + startNumber + "endNumber=" + endNumber);

        int count = shCreaditPlm7020Mapper.insertViewData(clienPort, startNumber, endNumber);
        logger.info("线程:" + Thread.currentThread().getName() + "执行完毕,插入了" + count + "条数据!");
    }
}

service如下:直接启动,配合线程池

public void queryViewToLocal(String clientPort) {
        logger.info("查询:" + clientPort + "号端客户");
        //查询所有数据量
        int allDataNumber = shCreaditPlm7020Mapper.selectAllDataNumber(clientPort);
        logger.info("DBLINK返回一共有:" + allDataNumber + "条数据!");
        //计算每个线程执行的条数
        int erverThreadDoNumber = allDataNumber / 4;
        int startNum = 0;
        int endNum = erverThreadDoNumber;
        int threadNum = 4;

        //创建线程池
        ExecutorService executorService = Executors.newFixedThreadPool(threadNum);
        for (int i = 0; i < threadNum; i++) {
            SuanHuaPlm7020Thread thread = new SuanHuaPlm7020Thread(String.valueOf(startNum), String.valueOf(endNum),
                    clientPort);
            executorService.execute(thread);
            startNum += erverThreadDoNumber;
            endNum += erverThreadDoNumber;
            if (3 == i && (allDataNumber % 4) != 0) {
                //如果没有除尽 多余的交给最后一个线程
                endNum += allDataNumber % 4;
            }
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值