【主题】:求教关于多线程批量插入大量数据的思路
public class ThreadImport {
static Connection conn;
    public void multiThreadImport( final int ThreadNum){
        final CountDownLatch cdl= new CountDownLatch(ThreadNum);
        long starttime=System.currentTimeMillis();
        for(int k=1;k<=ThreadNum;k++){
            new Thread(new Runnable() {
                @Override
                public void run() {
                   // 获得连接
                try {
conn = (new DatabaseUtils.Builder().setHost("localhost").setDbName("study").setUser("study")
.setPassword("123").builder()).getConection();
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
                        //插入500/线程数条数据
                        for(int i=1;i<=500/ThreadNum;i++){
                            String uuid=UUID.randomUUID().toString();
                        
try {
   PreparedStatement ps = conn.prepareStatement("INSERT into demo(name,adress) values (?, ?)");
  // ps.addBatch("insert into demo(name,adress) values('"+uuid+"','"+uuid+"')");
    ps.setString(1, uuid);
    ps.setString(2, uuid);
ps.executeUpdate();
if(i%500==0){
                           ps.executeBatch(); //500条执行一次
                       System.out.println("INSERT into demo(name,adress) values " + uuid + uuid);
                           }

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
                            
                        }
                        cdl.countDown();
                }
            }).start();
        }
        try {
            cdl.await();
            long spendtime=System.currentTimeMillis()-starttime;
            System.out.println( ThreadNum+"个线程花费时间:"+spendtime);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


    }


    public static void main(String[] args) throws Exception {
        ThreadImport ti=new ThreadImport();
        ti.multiThreadImport(1);
        System.out.println("+++1个线程结束+++");
        ti.multiThreadImport(5);
        System.out.println("+++5个线程结束+++");
        ti.multiThreadImport(8);
        System.out.println("+++8个线程结束+++");
        ti.multiThreadImport(10);
        System.out.println("+++10个线程结束+++");
        ti.multiThreadImport(20);
        System.out.println("+++20个线程结束+++");
        ti.multiThreadImport(40);
        System.out.println("+++40个线程结束+++");
        System.out.println("笔记本CPU数:"+Runtime.getRuntime().availableProcessors());
   
    }


}
--------------------- 
作者:BLONG'S Blog 
来源:CSDN 
原文:https://blog.csdn.net/Android_Mrchen/article/details/75098306 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 发表评论     发表时间:『2018-11-02 09:28:09』


扫描二维码关注网站最新动态