银行账号同步多线程处理

需求:银行账号同步只能一个一个账号同步,但可能有很个账号需要同步,如果只有一个线程处理,客户端需要等很久才能处理完


改进:客户端发送同步请求(对象)过来,直接放到队列中,然后直接返回200给客户端,这样客户端就不需要等待,可以很快得到反馈


1. 客户端代码入口: BankSynchroProcessor.getInstance().acceptRequest(bsd);

              

 public void acceptRequest(BankSyncDto obj) throws Exception {

        RequesttHandler request = new RequesttHandler(obj);
        executor.execute(request);
    }

class RequesttHandler implements Runnable {

        BankSyncDto obj;

        public RequesttHandler(BankSyncDto obj) {
            this.obj = obj;
        }

        @Override
        public void run() {
            try {
                handler.doHandler(obj, instance);

            } catch (Throwable t) {
                errorHandler.doHandler(t);
            }
        }
    }



handler code:


 @Override
    public void doHandler(BankSyncDto bd, BankSynchroProcessor process) throws Exception {
        try {
....处理具体逻辑,返回结果JsonResultBeanCode



            // 处理结果JsonResultBeanCode,如果失败,则重新放入队列中
            if (!jsonResultBean.getCode().equals(JsonResultBeanCode.SUC)) {
                if (bd.getTimes() <= 2) {// 重发三次
                    bd.setTimes(bd.getTimes() + 1);
                    process.acceptRequest(bd);
                } else {
                    // log error log
                    writeLog(bd);
                }
            }



你可能感兴趣的:(线程池)