工作中遇到的场景,这里写个例子出来,实际应用比此处更为健壮和完善

应用场景:

对一张表10万条数据(或100万或1亿+)进行更新操作或写入操作;

菜鸟是一条一条的执行吧,这显然不行啊

我在实际项目中是这样应用的, 批量更新!当然这显然是不够的 要线程批量更新才对吧!

怎么做呢?

举例1:10万条数据 ,我1000条1000条的处理 就是,10万/1000 = 100 ,

这里我就用100个线程同时处理,每个线程负责1000条数据,这里有个关键点,处理的数据不能重复!

给个代码示例吧:

线程池中线程数量可以根据 数据量/单个线程处理数量 来计算

public class DySchedule {

private static AtomicInteger line = new AtomicInteger(0);
static ExecutorService pool = Executors.newFixedThreadPool(100);

public static int getLine(){
    return line.addAndGet(1000);
}
public static void doJob(){
    for (int i = 0;i<100;i++){
        Thread thread = new MyThread();
        pool.execute(thread);
    }
    pool.shutdown();

}
public static void main(String[] args) {
    DySchedule.doJob();
}

}

以下是每个线程要执行的内容

public class MyThread extends Thread {

@Override
public void run() {
    System.out.println("线程:" + Thread.currentThread().getName());
    Integer num = DySchedule.getLine();
    System.out.println("startline = " +(num-1000)+",endline = " + num);
}

}

程序运行结果:

线程:pool-1-thread-1
startline = 0,endline = 1000
线程:pool-1-thread-2
startline = 1000,endline = 2000
线程:pool-1-thread-5
线程:pool-1-thread-3
startline = 2000,endline = 3000
startline = 3000,endline = 4000
线程:pool-1-thread-4
startline = 4000,endline = 5000
线程:pool-1-thread-6
线程:pool-1-thread-7
startline = 6000,endline = 7000
startline = 5000,endline = 6000
线程:pool-1-thread-9
startline = 7000,endline = 8000
线程:pool-1-thread-8
startline = 8000,endline = 9000
线程:pool-1-thread-10
startline = 9000,endline = 10000
线程:pool-1-thread-12
startline = 10000,endline = 11000
线程:pool-1-thread-11
startline = 11000,endline = 12000
线程:pool-1-thread-16
startline = 12000,endline = 13000
线程:pool-1-thread-15
线程:pool-1-thread-19
startline = 14000,endline = 15000
startline = 13000,endline = 14000
线程:pool-1-thread-20
startline = 15000,endline = 16000
....
....

这里只把每个线程要处理的数据行数或分割号列举处理了,

比如以上

线程:pool-1-thread-1
startline = 0,endline = 1000 处理数据库0-1000行的数据

线程:pool-1-thread-2
startline = 1000,endline = 2000 处理1000-2000行的数据

接下来的批量任务内容是不是简单多了,不多少了,记住这里关键点就是保证数据不重复!,不遗漏!

这样子的思路几百万或者几千万级别的批量处理是没有什么问题的,

但是 你有几个亿或者几百亿的数据需要批量处理怎么办呢? 小伙子 别急,作为一名资深程序员当然还是有办法的

需要吧以上思路或方案设计成分布式,多任务,多线程的schedule 就可以了,

累了,点到为止吧..草草记下,不足之处可以留言

标签: none

相关阅读

  • 测试信息
  • 拼多多2023年度财报分析
  • 2023年最后一个工作日
  • 2023山东社会责任企业(企业家)” 推选活动结果
  • 测试信息
  • 测试信息
  • 测试信息