java访问jdbc时的多线程并发问题

bbmckpt7  于 2021-06-26  发布在  Impala
关注(0)|答案(0)|浏览(223)

我想做的是:有两个线程t1,t2,其中t1连接到i1 impala集群,t2连接到i2
t1和t2的任务都是在各自的数据库中执行一组查询。
下面是伪代码:

queriesMap(queryName,query)//got the queries dynamically from another table, customized and set to map here

    myThreadMethod(queriesMap, connUrl)
   {
   conn = getImpalaConnection(connUrl)
   stmt = conn.createStatement()
   for each query in queriesMap
   {
       ResultSet rs=stmt.executeQuery(query);
       ResultSetMetadata rsMetadata = rs.getMetadata();
       rs.next(); //assuming retrieving only the sum- only one row
       for(i=1;i<=rsMetadata .getColumnCount();i++)
      {
          //append column names and print
          //append result values and print
      }
    }
    }

现在,每次打印的列和结果值的方式不同。如果在没有线程的情况下运行相同的代码,则结果与预期一样。注意:我试过threadlocal,但没用
有人能告诉我是什么引起了这个问题吗?
预期结果:
螺纹1

Query1   q1-C1 q1-C2 q1-C3 q1-c4 q1-c5
          q1-V1 q1-V2 q1-V3 q1-V3 q1-V5

 Query2  q2-C1 q2-C2 q2-C3 
         q2-V1 q2-V2 q2-V3 

 Query3  q3-C1 q3-C2 q3-C3 q3-c4 q3-c5
         q3-V1 q3-V2 q3-V3 q3-V3 q3-V5

螺纹2

Query1   q1-C1 q1-C2 q1-C3 q1-c4 q1-c5
          q1-V1 q1-V2 q1-V3 q1-V3 q1-V5

 Query2  q2-C1 q2-C2 q2-C3 
         q2-V1 q2-V2 q2-V3 

 Query3  q3-C1 q3-C2 q3-C3 q3-c4 q3-c5
         q3-V1 q3-V2 q3-V3 q3-V3 q3-V5

我当前得到的结果并不总是相同的,只是举个例子:查询1的q1-c1列1,查询1的q1-v1值/结果1
螺纹1:

Query1   q1-C1 q1-C2 q1-C3 q1-c4 q1-c5
          q1-V1 q1-V2 q1-V3 q1-V3 q1-V5

 Query2  q2-C1 q2-C2 q2-C3 
         q2-V1 q2-V2 q2-V3 

 Query3  q3-C1 q3-C2 q3-C3 q3-c4 q3-c5
         q3-V1 q3-V2 q3-V3 q3-V3 q3-V5

t2段:

Query1  q1-C1 q1-C2 q1-C3 q1-c4 q1-c5
         q1-V1 q1-V2 q1-V3 q1-V3 q1-V5

 Query2  q2-C1 q2-C2 q2-C3 
         q2-V1 q2-V2 q2-V3 

**Query3  q2-C1 q2-C2 q2-C3 

         q3-V1 q3-V2 q3-V3**

如预期结果和当前结果所示,问题是thread2 query3存在列元数据混乱。这个结果不一致,查询1有一次问题,查询2有一次问题,等等

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题