分享

多线程实现大批量数据导入

 aaie_ 2017-01-03
    package com.mypack.thread;   
       
    import java.util.ArrayList;   
    import java.util.List;   
       
    /** 
     * <ul> 
     * 学生线程 
     * </ul> 
     *  
     * @author liudong 
     *  
     */   
    public class StudentThread extends Thread {   
       
        private List<Student> students = new ArrayList<Student>();   
       
        public StudentThread(List<Student> students) {   
            this.students = students;   
       
        }   
       
        public void run() {   
       
            for (Student student : students) {   
                System.out.println("当前线程:" + Thread.currentThread().getName());   
                System.out.println("name = " + student.getName() + " age = "   
                        + student.getAge() + " sex = " + student.getSex());   
                // 导入学生信息到数据库中   
            }   
        }   
       
    }   
[java]
package com.mypack.thread;     
     
import java.util.ArrayList;     
import java.util.List;     
     
/**  
 *   
 * <ul>  
 * 测试类  
 * </ul>  
 *   
 * @author liudong  
 *   
 */     
public class Test {     
     
    public static void main(String[] args) {     
     
        Test test = new Test();     
        // 查询所有的学生信息      
        List<Student> students = test.getAllStudents();     
        // 定义一个临时集合,用于存放学生信息      
        List<Student> tempStudents = new ArrayList<Student>();     
     
        for (int i = 0; i < students.size(); i++) {     
            tempStudents.add(students.get(i));     
            if (i != 0 && i % 50000 == 0) {     
                test.createThread4ExportStudentInfo(tempStudents, i);     
            }     
        }     
     
        test.createThread4ExportStudentInfo(tempStudents, students.size());     
     
    }     
     
    /**  
     * <li>创建线程,导入学生信息</li>  
     *   
     * @param tempStudents  
     *            每个线程,需要导入的学生信息的数量  
     * @param i  
     */     
    public void createThread4ExportStudentInfo(List<Student> tempStudents, int i) {     
     
        List<Student> students = new ArrayList<Student>();     
     
        for (Student student : tempStudents) {     
            students.add(student);     
        }     
     
        StudentThread studentThread = new StudentThread(students);     
        // 设置线程名称      
        studentThread.setName("Thread-" + i);     
        // 启动线程      
        studentThread.start();     
     
        // 重新生成一个新的临时学生集合。      
        tempStudents = new ArrayList<Student>();     
    }     
     
    /**  
     * <li>查询所有的学生信息</li>  
     *   
     * @return  
     */     
    public List<Student> getAllStudents() {     
     
        List<Student> students = new ArrayList<Student>();     
     
        for (int i = 1; i <= 100000; i++) {     
            Student student = new Student();     
     
            student.setName("liudong" + i);     
            student.setAge(i);     
            student.setSex(i + "");     
     
            students.add(student);     
        }     
     
        return students;     
    }     
}    

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多