
线程的概念:Thread 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。
多线程的概念: 多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。
多线程的特点:使用线程可以把占据长时间的程序中的任务放到后台去处理
用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以d出一个进度条来显示处理的进度 。
程序的运行速度可能加快 ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。
在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
线程定义比较抽象,简单的说就是一个代码执行流。许多执行流可以混合在一起由CPU调度。线程是允许各种任务交互执行的方式。
Java的线程在 *** 作系统的实现模式依系统不同而不同,可能是系统级别的进程或线程,但对于程序员来说并没有影响。
任务交互的一个好处是增加程序响应。如一个界面程序执行一段耗时的数据库查询,使用单独的线程可以让界面依然响应用户的其他输入,而单线程只能等待查询结束再处理。
JVM以及 *** 作系统会优先处理优先级别高的线程,但不代表这些线程一定会先完成。设定优先级只能建议系统更快的处理,而不能强制。
另外,在运行时,并没有按照函数分界,而是按照机器码/汇编码分界。也就是说不保证任何一段代码是被完整而不打断的执行的(除非你已经使用同步手段)。正由于如此,各种线程同步的方法应运而生。
//将数据库中的数据条数分段 public void division(){ //获取要导入的总的数据条数 String sql3="SELECT count(*) FROM [CMD].[dbo].[mycopy1]" try { pss=cons.prepareStatement(sql3) rss=pss.executeQuery() while(rss.next()){ System.out.println("总记录条数:"+rss.getInt(1)) sum=rss.getInt(1) } //每30000条记录作为一个分割点 if(sum>=30000){n=sum/30000 residue=sum%30000 }else{residue=sum } System.out.println(n+" "+residue) } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace() }}线程类public MyThread(int start,int end) { this.end=end this.start=start System.out.println("处理掉余数") try { System.out.println("--------"+Thread.currentThread().getName()+"------------") Class.forName(SQLSERVERDRIVER) System.out.println("加载sqlserver驱动...") cons = DriverManager.getConnection(CONTENTS,UNS,UPS) stas = cons.createStatement() System.out.println("连接SQLServer数据库成功!!")System.out.println("加载mysql驱动.....") Class.forName(MYSQLDRIVER) con = DriverManager.getConnection(CONTENT,UN,UP) sta = con.createStatement() // 关闭事务自动提交con.setAutoCommit(false) System.out.println("连接mysql数据库成功!!") } catch (Exception e) {e.printStackTrace() } // TODO Auto-generated constructor stub } public ArrayList<Member>getAll(){ Member member String sql1="select * from (select row_number() over (order by pmcode) as rowNum,*" +" from [CMD].[dbo].[mycopy1]) as t where rowNum between "+start+" and "+end try { System.out.println("正在获取数据...") allmembers=new ArrayList() rss=stas.executeQuery(sql1) while(rss.next()){member=new Member() member.setAddress1(rss.getString("address1")) member.setBnpoints(rss.getString("bnpoints")) member.setDbno(rss.getString("dbno")) member.setExpiry(rss.getString("expiry")) member.setHispoints(rss.getString("hispoints")) member.setKypoints(rss.getString("kypoints")) member.setLevels(rss.getString("levels")) member.setNames(rss.getString("names")) member.setPmcode(rss.getString("pmcode")) member.setRemark(rss.getString("remark")) member.setSex(rss.getString("sex")) member.setTelephone(rss.getString("telephone")) member.setWxno(rss.getString("wxno")) member.setPmdate(rss.getString("pmdate")) allmembers.add(member) // System.out.println(member.getNames()) } System.out.println("成功获取sqlserver数据库数据!") return allmembers } catch (SQLException e) { // TODO Auto-generated catch block System.out.println("获取sqlserver数据库数据发送异常!") e.printStackTrace() } try { rss.close() stas.close() } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace() } return null} public void inputAll(ArrayList<Member>allmembers){ System.out.println("开始向mysql中写入") String sql2="insert into test.mycopy2 values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)" try { ps=con.prepareStatement(sql2) System.out.println("-------------------------等待写入数据条数: "+allmembers.size()) for(int i=0i<allmembers.size()i++){ps.setString(1, allmembers.get(i).getPmcode()) ps.setString(2, allmembers.get(i).getNames()) //System.out.println(allmembers.get(i).getNames()) ps.setString(3, allmembers.get(i).getSex()) ps.setString(4, allmembers.get(i).getTelephone()) ps.setString(5, allmembers.get(i).getAddress1()) ps.setString(6, allmembers.get(i).getPmdate()) ps.setString(7, allmembers.get(i).getExpiry()) ps.setString(8, allmembers.get(i).getLevels()) ps.setString(9, allmembers.get(i).getDbno()) ps.setString(10, allmembers.get(i).getHispoints()) ps.setString(11, allmembers.get(i).getBnpoints()) ps.setString(12, allmembers.get(i).getKypoints()) ps.setString(13, allmembers.get(i).getWxno()) ps.setString(14, allmembers.get(i).getRemark()) //插入命令列表//ps.addBatch() ps.executeUpdate() } //ps.executeBatch() con.commit() ps.close() con.close() this.flag=false System.out.println(Thread.currentThread().getName()+"--->OK") } catch (SQLException e) { // TODO Auto-generated catch block System.out.println("向mysql中更新数据时发生异常!") e.printStackTrace() } } @Override public void run() { // TODO Auto-generated method stub while(true&&flag){ this.inputAll(getAll()) } }欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)