我想使用 JDBC 插入数据。我写了这段代码:
//我想在这里启动线程
while(stmt_ver.next()){
stmt_ver.setString(i, "test"+... );
stmt_ver.executeBatch();
connection_ver.commit();
}
//我要在这里结束线程
我怎样才能用线程做到这一点?
我想使用 JDBC 插入数据。我写了这段代码:
//我想在这里启动线程
while(stmt_ver.next()){
stmt_ver.setString(i, "test"+... );
stmt_ver.executeBatch();
connection_ver.commit();
}
//我要在这里结束线程
我怎样才能用线程做到这一点?
干得好。用代码更新答案
线程类
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();
}
}
}
new Thread(new Runnable(){
@Override public void run(){
//enter code here
}
}).start();
编辑您想并行插入许多线程...
有许多不同的可能性。
您应该阅读:并发(并发集合)和执行器。
编辑 2我同意 Thomas Uhrig 的观点,在这里引入 Threads 可能弊大于利。为什么你认为它会有所帮助?
你的问题很难回答。你问的很模糊。试着说清楚。发布所有必要的代码。试着解释你做了什么以及你想做什么。
这里给你一些提示。如果您复制并通过它,它将不会运行,但我认为它应该清楚您可以尝试什么:
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 通常需要一些时间,这可以提高代码的执行时间。但请注意 - 线程并不容易。这是一个非常简单、幼稚的解决方案。它可能会导致比它解决的问题更多的问题。如果您不熟悉线程(看起来您不熟悉),请不要这样做!
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() 创建的线程的值进行同时插入,确定您要执行的插入操作的数量。希望您是这个意思。