批量任务的并发框架 总结

1.整个并发框架是围绕线程池来搭建

  • 线程池的声明
    //任务队列
    private static BlockingQueue taskQueue
     = new ArrayBlockingQueue<>(5000);
    //线程池,固定大小,有界队列
    private static ExecutorService taskExecutor = 
            new ThreadPoolExecutor(THREAD_COUNTS, THREAD_COUNTS, 60, 
                    TimeUnit.SECONDS, taskQueue);
  • 线程池处理任务
    这里核心是设计task,使得task里面的run调用业务处理方法MyTask.taskExecute。
    而MyTask是放在jobInfoMap里面的。
    //调用者提交工作中的任务
    public  void putTask(String jobName,T t) {
        JobInfo jobInfo = getJob(jobName);
        PendingTask task = new PendingTask(jobInfo,t);
        taskExecutor.execute(task);
    }
  • 线程池每处理完一个任务,就要更新进度
    任务结果类型保存在TaskResult里面;
    进度更新是在JobInfo里面完成。

2.任务处理的时候,要考虑各种异常情况

            try {
                //调用业务人员实现的具体方法
                result = taskProcesser.taskExecute(processData);
                //要做检查,防止开发人员处理不当
                if (result == null) {
                    result = new TaskResult(TaskResultType.Exception, r, 
                            "result is null");
                }
                if (result.getResultType() == null) {
                    if (result.getReason() == null) {
                        result = new TaskResult(TaskResultType.Exception, r, "reason is null");
                    } else {
                        result = new TaskResult(TaskResultType.Exception, r,
                                "result is null,but reason:" + result.getReason());
                    }
                } 
            } catch (Exception e) {
                e.printStackTrace();
                result = new TaskResult(TaskResultType.Exception, r, 
                        e.getMessage());                
            }finally {
                jobInfo.addTaskResult(result,checkJob);
            }

你可能感兴趣的:(批量任务的并发框架 总结)