-1

我想使用 JDBC 插入数据。我写了这段代码:

//我想在这里启动线程

      while(stmt_ver.next()){ 
        stmt_ver.setString(i, "test"+... ); 
        stmt_ver.executeBatch();
        connection_ver.commit(); 
}

//我要在这里结束线程

我怎样才能用线程做到这一点?

4

4 回答 4

1

干得好。用代码更新答案

线程类

public class MyThreadedClass extends Thread{

     //Do what I need here on a thread
     public void run(){
         //Do what I need here
     }
}

主要的

//Main class
public static class MyProgramMain{

//Program main
public static void main(String[] args) {


                //Send 10 threads
        for (int i=0; i<10; i++){

                  //Init class (threaded)
                   MyThreadedClass threadedClass = new MyThreadedClass();

                   //Execute code in the class run() method
                   threadedClass.start();
            }
    }
}
于 2013-06-24T10:51:09.850 回答
1
new Thread(new Runnable(){ 
@Override public void run(){
//enter code here
   }
}).start();

编辑您想并行插入许多线程...

有许多不同的可能性。

您应该阅读:并发(并发集合)和执行器。

编辑 2我同意 Thomas Uhrig 的观点,在这里引入 Threads 可能弊大于利。为什么认为它会有所帮助?

于 2013-06-20T13:15:07.507 回答
1

你的问题很难回答。你问的很模糊。试着说清楚。发布所有必要的代码。试着解释你做了什么以及你想做什么。

这里给你一些提示。如果您复制并通过它,它将不会运行,但我认为它应该清楚您可以尝试什么:

int i = 0;
while(i < columnCount ){

    // make a new statement
    Statement stmt_ver = new Statement();

    // set your data and make the statement ready
    stmt_ver.set...

    // make a new thread that executes your data
    // and let it run
    new Thread(){ 

        public void run(){

            stmt_ver.addBatch();  
            stmt_ver.executeBatch();
            connection_ver.commit(); 
        }
    }.start();

    i++; 
}

这是一个非常简单的解决方案。它将在每次迭代时启动一个线程。由于 I/O 通常需要一些时间,这可以提高代码的执行时间。但请注意 - 线程并不容易。这是一个非常简单、幼稚的解决方案。它可能会导致比它解决的问题更多的问题。如果您不熟悉线程(看起来您不熟悉),请不要这样做!

于 2013-06-20T15:00:08.627 回答
0
public class MockCommonDao  {

     ArrayList<ArrayList> listOlists = new ArrayList<ArrayList>();

     public List CommonInsert(List<Object> example)
        {
         List<Future<Object>> listOlists = null;
         ExecutorService executor = Executors.newFixedThreadPool(example.size());
         List<TransactionImpl> callingList = new ArrayList<MockCommonDao.TransactionImpl>();
         for (int i = 0; i < example.size(); i++) {
             TransactionImpl localImpl = new TransactionImpl(example.get(i));
             callingList.add(localImpl);
         }
         try {

             listOlists = executor.invokeAll(callingList);

         } catch (InterruptedException e) {

         }
         return listOlists;





        }
private class TransactionImpl implements Callable<Object>{
          private Object example;


          TransactionImpl(Object Criteria) {
                this.example = Criteria;

            }


            @Override
            public Object call() throws Exception {

            private class TransactionImpl implements Callable<Object>{
          private Object example;


          TransactionImpl(Object Criteria) {
                this.example = Criteria;

            }


            @Override
            public Object call() throws Exception {

            while(stmt_ver.next()){ 
        stmt_ver.setString(i, "test"+... ); 
        stmt_ver.executeBatch();
        connection_ver.commit(); 
}
      }
      }}
      }

此代码将根据您要为 insert.example.size() 创建的线程的值进行同时插入,确定您要执行的插入操作的数量。希望您是这个意思。

于 2013-06-24T12:23:44.270 回答