阅读背景:

多线程优化

来源:互联网 

   public void newExecute() {
        //获得线程数,默许30
        int threadNum = 30;
        String strThreadNum = LionConfigUtils.getProperty("ts-monitor-job.dailyJob.accountBalanceDailyCheckerThreadNum",
                "");
        if (isNumeric(strThreadNum)) {
            threadNum = Integer.parseInt(strThreadNum);
        }
        ExecutorService service = Executors.newFixedThreadPool(threadNum);
        //所有账号总数
        int accountCount = accountDao.findAllMerchantAccountCount();
        int latchCount = accountCount % BATCH_SIZE == 0 ? accountCount / BATCH_SIZE : (accountCount / BATCH_SIZE + 1);
        final CountDownLatch latch = new CountDownLatch(latchCount);
        final Date bizDate = DateUtils.addDate(DateUtils.removeTime(new Date()), -1);
        final Date lastBizDate = DateUtils.addDate(bizDate, -1);
        int offset = 0;
        while (offset < accountCount) {
            offset += BATCH_SIZE;
            final int initPage = offset;
            Runnable run = new Runnable() {
                public void run() {
                    try {
                        //todo
                        List<AccountData> accountDataList = accountDao.findAllMerchantAccount(initPage, BATCH_SIZE);
                        for (AccountData accountData : accountDataList) {
                            Thread.sleep(20);
                            doAccountMonitor(bizDate, lastBizDate, accountData);
                        }
                    } catch (Exception e) {
                        monitorLogger.error(String.format("severity=[1], query account data list fail! offset = " +
                                "[%d]...", initPage), e);
                    } finally {
                        latch.countDown();
                    }
                }
            };
            service.submit(run);
        }

        try {
            latch.await();
        } catch (InterruptedException e) {
            monitorLogger.error("CountDownLatch.await() error:" + e);
        }
    }   public void newExecute() {
        //获得线程数,默许3




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: