java多线程向数据库写入数据
任务: 从sqlserver中将一个表A(约16W条数据)导到mysql中对应的一个表B中。
思路:分段获取A表中的数据后,用多个线程同时向B表中写入。
关键代码
public class Test1 {DbManager dm=null;MyThread my1=null;public Test1(){dm=new DbManager();System.out.println(dm.n+"----"+dm.residue); if(dm.n<1){//数据条数小于30000单线程处理my1=new MyThread(1,dm.sum);my1.start=1;my1.end=dm.residue;Thread t1=new Thread(my1); t1.start();}else{//大于30000时 //起n个线程 每个处理30000条数据for (int i = 1; i <=dm.n; i++) {new Thread(new MyThread(i)).start();try {Thread.sleep(1);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//处理掉余数my1=new MyThread(dm.n*30000+1,dm.sum);Thread t1=new Thread(my1); t1.start();} }public static void main(String[] args) {//new Test1();//迁移完数据,自动关机 try {Runtime.getRuntime().exec("cmd /c Shutdown -t 10");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }经过多次测试:从sqlserver中读取16w条数据并写入mysql,耗时15min左右。
开始会报错: java heap space
解决方案:(myeclipse)window->Preferences->Java->Installed JREs,选择当前的JRE,然后edit它;在新窗口里设置Default VM Arguments为 -Xms512M -Xmx512M即可
: