您的位置:首页 > 数据库

大量数据情况下单线程插入和多线程(高并发)insert数据库的性能测试

2017-07-14 10:36 671 查看
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());

   

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  高并发 多线程