运用多线程批量插入大量数据

  • 创建线程池
public class InsertTest {

    @Test
    public void t1() {

        IMyThreadService sv = LocalContextFactory.getInstance().getBean("IMyThreadService", IMyThreadService.class);
        // 创建线程池 
        ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 200000, 200, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
        for (int i = 0; i < 10; i++) {
            R1 runnableDes = new R1(sv);
            executor.execute(runnableDes);
        }
        System.out.println("线程池中线程数:" + executor.getPoolSize());
        // 释放资源
        executor.shutdown();
    }
}

class R1 implements Runnable {
    private IMyThreadService name;
    public R1(IMyThreadService name) {
        this.name = name;
    }
    @Override
    public void run() {
        long time1 = System.currentTimeMillis();
        for (int i = 0; i < 1; i++) {
            name.batchInsert();
        }
        long time2 = System.currentTimeMillis();
        System.out.println("线程" + Thread.currentThread().getName() + ":" + (time2 - time1) + "ms");

    }

}
  • 插入数据库
public class MyThreadServiceImpl implements IMyThreadService {

    @Override
    public void batchInsert() {
        
        try {
            // 插入语句
            // 可以控制插入多少条提交一次事务
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

版权声明:本文为sinat_34560420原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。