并发数据库访问给出IllegalStateException

RMT*_*RMT 4 java multithreading

我试图只为1个方法生成一个线程.我得到了IllegalStateException(见下文).这个方法接受数据库连接和数据库名称,它将从中生成XML.(那部分可行,我只是想通过一个新线程让它更快,因为我有多个XML文件要创建.

    Thread table = new Thread(new Runnable() {
    public void run() {
    try {
     System.out.println("starting");
     tableXml(tableConn, dbName);
     System.out.println("ending");
     }
     catch (Exception e) {
      // TODO Auto-generated catch block
        e.printStackTrace();
      }
  }
});

    table.start();
Run Code Online (Sandbox Code Playgroud)

例外:

java.lang.IllegalStateException: Current state = RESET, new state = FLUSHED
    at java.nio.charset.CharsetEncoder.throwIllegalStateException(CharsetEncoder.java:951)
    at java.nio.charset.CharsetEncoder.flush(CharsetEncoder.java:640)
    at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:769)
    at com.informix.lang.JavaToIfxType.doConversion(JavaToIfxType.java:841)
    at com.informix.lang.JavaToIfxType.JavaToIfxChar(JavaToIfxType.java:145)
    at com.informix.jdbc.IfxVarChar.toString(IfxVarChar.java:247)
    at com.informix.jdbc.IfxResultSet.getString(IfxResultSet.java:742)
    at com.informix.jdbc.IfxResultSet.getString(IfxResultSet.java:785)
    at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:225)
    at com.test.ex.ExportTask$1.run(ExportTask.java:151)
    at java.lang.Thread.run(Thread.java:662)
Run Code Online (Sandbox Code Playgroud)

导致异常的代码行是a resultSet.executeQuery();

所以问题是:我做错了什么?

感谢您的帮助,如果您需要信息,请与我们联系

Joh*_*ane 8

似乎问题是因为您的代码不是线程安全的.尝试为每个新生成的线程提供自己的连接,而不是共享应用程序中所有线程之间的单个连接的引用.