我没有得到如何解决此异常。
我将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会
只打印几条记录的两个见解。
请任何人帮助我。
提前谢谢
答案 0 :(得分:0)
没办法。您遇到了并发错误。
你得到N个结果 - &gt;开始N个线程。在每个帖子中,你再次循环在结果集上。它没有多大意义,更糟糕的是,一个线程检查rs.next
是否为真,输入迭代,由另一个完成结果集数据的线程挂起,并在恢复时尝试从中读取数据结果集没有数据。
最简单的(不改变机制)解决方案是将线程主循环放在同步循环中,但这将导致大量死锁,因此您将以无线程的相同性能结束。
至于你的代码,我认为你真正想要的是,在主循环中,将所有结果提取到数据结构中,并将该数据结构传递给每个线程,以便它可以直接处理它(并且没有传递导致此类问题的共享结果集对象。)