public void read(String database) {
Telnet t = new Telnet();
PreparedStatement preStmt_read;
ResultSet rs_read;
String strSQL = "select * from SERVERLIST order by id desc";
try {
preStmt_read = getLocalCn().prepareStatement(strSQL,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs_read = preStmt_read.executeQuery();
while(rs_read.next()) {
java.util.Date d = new java.util.Date();
String AREANAME = rs_read.getString("AREANAME");
int id = rs_read.getInt("ID");
String serverip = rs_read.getString("SERVERIP");
int port = rs_read.getInt("PORT");
String PASSWD = rs_read.getString("PASSWD");

this.readAllDatabase(id, AREANAME, serverip, port, database, PASSWD);
//上面这个readAllDatabase()我想多线程执行,意思就是说本来的程序执行流程是while(rs_read.next()),读一条记录才执行一个readAllDatabase()的。我现在想每4条记录成为多线程同一时间执行。怎么做啊?????
}
rs_read.close();
preStmt_read.close();
getLocalCn().close();
} catch(Exception e) {
System.out.println("read:" + database + ":" + e.toString());
}
}

解决方案 »

  1.   

    rs多线程执行?会不会造成rs的内存泄露?
    或者提前关闭rs,造成多线程里无法读取数据?你怎么控制并发下的读取和关闭事件呢?
    还是单线程简单安全啊。
      

  2.   

    1.将参数(id, AREANAME, serverip, port, database, PASSWD)进行封装成对象。
    2.如果是JDK1.4就编写一个阻塞队列,如果是JDK1.5以上的版本,直接使用阻塞队列就可以了。
    3.创建一个阻塞队列的对象,将readAllDatabase方法,转换成向阻塞队列里面添加(1)所封装的对象。
    4.编写处理线程,线程的处理内容如下:
      A。线程类构造函数要传入阻塞队列的对象。
      B。run方法完成原有while(rs_read.next())方法的剩余部分的代码。
      C。如果每个线程只想处理4条记录,就使用for循环来限定。(建议3~5个线程处理所有的记录,记录很少时不要使用多线程来处理)
      

  3.   

    还是说说你最终要干什么吧?你这里在While中加入线程,而且四个一组感觉很诡异.你说出你最终的目的,或许大家能给你更好的方法
      

  4.   

    先单线程把 RS 中数据读到一个 Bean List 中,再对此 Bean List 进行同步多线程访问。