免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2631 | 回复: 0
打印 上一主题 下一主题

在有10000条数据的表中做大量查询,多线程没有提高运行速度 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-19 16:57 |只看该作者 |倒序浏览
本文试图证明多线程的效率,在有10000条数据的表中做大量查询,但结果证明多线程没有提高运行速度。
package c1;
import java.sql.*;
import java.util.Calendar;
import java.util.Properties;
public class Test {
/**
  * @param args
  */
public static void main(String[] args) {
  //MultiThread mt=new MultiThread();
  SingleThread.run();
  MultiThread.initconn();
// String[] str={};
for(int i=0;i
    try{
        DriverManager.registerDriver ( new oracle.jdbc.driver.OracleDriver());
           Properties conProps = new Properties();
           conProps.put("user", "sys");
           conProps.put("password", "test");
           conProps.put("defaultRowPrefetch", "15");
           conProps.put("internal_logon", "sysdba");
   //  Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:test","system","test");
     Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:test",conProps);
     PreparedStatement pstmt;
     ResultSet rset;
     //boolean tableexist;
     pstmt = conn.prepareStatement("select count(*) from user_tables where table_name='PERSONS'");
     //pstmt = conn.prepareStatement("select count(*) from dba_tablespaces");
     pstmt.execute();//
     rset = pstmt.executeQuery();
     while (rset.next()){
         //System.out.println (rset.getString(1));   // Print col 1
         if(rset.getInt(1)==1){
          pstmt = conn.prepareStatement("DROP TABLE Persons");
          pstmt.executeQuery();
         }
     }
   
     pstmt = conn.prepareStatement("CREATE TABLE Persons(Id_P int,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255))");
     pstmt.execute();
     int i;
     int j=10000;
     for(i=0;i
}
}
class MultiThread implements Runnable {
public static Connection conn;
public   static int i=0;
public static int j=10000;
public static int cur=0;
public int startpoint=0;
public int endpoint=0;
public static int id=0;
public int threadid=id++;
public static Calendar calendar;
public static Calendar ccalendar;
MultiThread(){
  
  //System.out.println("in MultiThread "+threadid);
}
public void run(){
  //System.out.println("in MultiThread run "+threadid);
  if(cur==0){
    calendar = Calendar.getInstance();
  }
  while(cur=j){//cur>j means all the threads has finished;
     ccalendar = Calendar.getInstance();
       int oday=calendar.get(Calendar.DAY_OF_MONTH);
       int ohour=calendar.get(Calendar.HOUR_OF_DAY);
       int omin=calendar.get(Calendar.MINUTE);
       int osec=calendar.get(Calendar.SECOND);
      
       int cday=ccalendar.get(Calendar.DAY_OF_MONTH);
       int chour=ccalendar.get(Calendar.HOUR_OF_DAY);
       int cmin=ccalendar.get(Calendar.MINUTE);
       int csec=ccalendar.get(Calendar.SECOND);
      
       if(csec-osec
    try{
        DriverManager.registerDriver ( new oracle.jdbc.driver.OracleDriver());
           Properties conProps = new Properties();
           conProps.put("user", "sys");
           conProps.put("password", "test");
           conProps.put("defaultRowPrefetch", "15");
           conProps.put("internal_logon", "sysdba");
   //  Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:test","system","test");
     conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:test",conProps);
     PreparedStatement pstmt;
     ResultSet rset;
     //boolean tableexist;
     pstmt = conn.prepareStatement("select count(*) from user_tables where table_name='PERSONS'");
     //pstmt = conn.prepareStatement("select count(*) from dba_tablespaces");
     pstmt.execute();//
     rset = pstmt.executeQuery();
     while (rset.next()){
         //System.out.println (rset.getString(1));   // Print col 1
         if(rset.getInt(1)==1){
          pstmt = conn.prepareStatement("DROP TABLE Persons");
          pstmt.executeQuery();
         }
     }
   
     pstmt = conn.prepareStatement("CREATE TABLE Persons(Id_P int,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255))");
     pstmt.execute();
     for(i=0;i
    }
    catch(SQLException e){e.printStackTrace();}
}

}
/*
10000 records were inserted into SingleThread;
0 day 0 hour 0 min 57 sec
SingleThread methord finished
10000 records were inserted in MultiThread;
0 day 0 hour 0 min 57 sec
MultiThread methord finished
*/

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/19919/showart_2153374.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP