大概是这样的思路,扫描2000+的MySQL服务器,通过我的弱口令表去挨个连接他们(大概100个账户),看看能否成功,如果成功则证明检查不合格。共5个thread,一个thread中包含一个大循环遍历账户表,然后每次new 一个DataBaseInfo ,调用ConnectDatabase()这个来判断是否成功。当运行一段时间后,出现Communications link failure,最终所有的线程都会停止在ConnectDatabase()中,不抛异常,不停止。用的jdk1.5
public class DataBaseInfo 
{
  //do more
  public boolean ConnectDatabase()
    {
        try
        {
            Class.forName(driver);      
            if (conn!=null)
            {
                conn.close();                
            }
            DriverManager.setLoginTimeout(120);
            conn=DriverManager.getConnection(this.Url,this.Account,this.Password);
            //SimpleLogger.Write("Succeeded connecting to the Database!");
            conn.close();
            return true; 
        }  
        catch(Exception e)
        {
            //SimpleLogger.WriteError("Database: Error:"); 
            System.out.println(this.Url+this.Account+this.Password+"---"+e.getMessage());
            e.printStackTrace();
            
            this.Close();
            return false;
        }
    }
}

解决方案 »

  1.   

    你没有用jdbc连接池吗?---dhcp,mysql有默认的连接数的,如果你的线程跑的快,连接数达到一定数量,就连接不成功了 。 
      

  2.   

    你可以尝试修改下mysql配置文件。
      

  3.   

    不是我的数据库,是别人的数据库,我希望通过建立连接是否成功来证明他们是否使用了弱密码。如果连接数达到一定连接数后(数据库拒绝连接),我希望的是抛出异常后,正常退出并释放资源,但我现在遇到的情况是抛出异常后,再开始一个新的thread去连接任何数据库都出现无响应的状态