你的位置:首页 > Java教程

[Java教程]java里面多线程,自己写的小例子

    

  某天,在群里看见有个人 问 sqlService里面有2000万条数据 需要转储到orcale中。什么方式比较好,后来一琢磨非多线程莫属啊~;

我这里没有那么多数据,所以我就模拟了下 一次存入10万条数据,看有多快~;上代码。

  在数据库创建 表 t_test  2个字段 id  name

    定义一个类 继承Runnable 实现run方法

    public class Test implements Runnable{

     //实现run方法

    public void run() {
 
     //定义一个集合~这个集合是用来装入存入失败的数据
     List<Integer> list = new ArrayList<Integer>();
        //这里就是要设置存入的数据 200个
     for (int i = 0; i < 200; i++) {
        
        String sql="INSERT into t_test VALUES(null,"+i+")";
        try {
           //jdbc方式存入,这个是自己写的工具类
           JDBCUtils.executeSQL(sql);
          } catch (Exception e) {
           //当出现错误的时候 会把没有存入的装入集合里面
           list.add(i);
            }      }

      //判断集合是否为空,不为空证明有数据没有存入,利用递归的方式在进行存入

       if(!list.isEmpty()){
        System.out.println("进来了");
        dg(list);
       }      }

       //需要进行递归的操作

    public void dg(List<Integer> list){
       ArrayList<Integer> list2 = new ArrayList<Integer>();
          for (Integer i : list) {
             String sql="INSERT into t_test VALUES(null,"+i+")";
               try {
                  JDBCUtils.executeSQL(sql);
                 } catch (Exception e) {
    
                  list2.add(i);
                 }
            }
            if(!list2.isEmpty()){
   
               System.out.println("进行递归");
               dg(list2);
                }else{
   
                   System.out.println("结束");
                }
  
               }

        

public static void main(String[] args) {

    

     Thread thread = null;

        //开启500跳线程

      for (int i = 0; i < 500; i++) {

          //需要开启线程的类

           thread = new Thread(new Test());  

            //开启现成

             thread.start();

                  }

               }

           }

    这只是一个思路~转储数据库的话其实和这个差不多;