-1

我不知道如何解决这个异常。

我将Resultset对象传递给每个线程。并做一些逻辑

我的示例程序是:

public class dataimport

{

  public dataimport()

          {

         connect(); /*connect to database 


         }

private void connect()

{

try
   {

       /* connected data base

        str="SELECT * FROM tablename where rownum<=5";


          rs1 = statement.executeQuery(str);

            while (rs1.next()) 
            { 

                    Runnable r = new MyThreadClass(rs1);

                                        System.out.println(new Thread().getName());

                                         new Thread(r).start();


            }               
}

线程类

class MyThreadClass implements Runnable

 {

public MyThreadClass(ResultSet rs1) 
   {


     rs2=rs1; 

    }


 public void run() 
   {   

           int i=1;

               try

                   {        

                      while (rs2.next())

                {

                                date=rs2.getString("mydate");

                                System.out.println("mydate="+date);

                                }

        }
     catch (Exception ex)
        {
            ex.printStackTrace();
        }


}

}

如果我在线程类中添加while(rs2.next()),也不会有例外,但是mydate它会

仅打印两个见解的少数记录。

请任何人都可以帮助我。

先感谢您

4

1 回答 1

0

没门。您遇到并发错误。

你得到 N 个结果 -> 启动 N 个线程。在每个线程内,您再次循环遍历结果集。这没有什么意义,更糟糕的是,一个线程可能会检查是否rs.next为真,进入迭代,被另一个完成结果集数据的线程挂起,并且在恢复时尝试从没有数据的结果集中读取数据。

最简单(不改变机制)的解决方案是将线程主循环置于同步循环中,但这会导致大量死锁,因此您将以与没有线程相同的性能结束。

至于你的代码,我认为你真正想要的是,在主循环中,将所有结果提取到一个数据结构中,并将该数据结构传递给每个线程,以便它可以直接处理它(并且不传递共享结果设置导致此类问题的对象)。

于 2013-04-22T10:40:19.880 回答