猿问

线程运行两三天后报错

public class TestThread extends Thread{
public void run(){
JDBCConnector conn = new JDBCConnector();
conn.creatConnection();
StringBuffer ids; 
ResultSet rs; 
//其他String变量
while(true){
try{
rs = null;
ids = new StringBuffer(); 
rs = conn.executeQuery("select id from test1 where status=0");
while(rs.next()){
ids.append(rs.getInt("id"));
ids.append(",");
}
//1、简单的业务逻辑处理,会用到其他String变量
//2、业务逻辑处理完成后,根据ids将status更新为1
Thread.sleep(1000);
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
  • 以上这个线程,运行几天后,tomcat会报[b]“GC overhead limit exceeded”[/b],d代码上是否有什么不合理的地方。


三国纷争
浏览 399回答 3
3回答

30秒到达战场

可能是因为rs没有关闭。[code="java"]if(!rs.isClosed()){rs.close();}Thread.sleep(1000); [/code]

开满天机

jconsole开起来看看内存回收情况
随时随地看视频慕课网APP

相关分类

Java
我要回答