- 论坛徽章:
- 0
|
本文试图证明多线程的效率,在有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 |
|