我想使用JDBC插入数据。 我写这段代码:
//我想在这里开始线程
while(stmt_ver.next()){
stmt_ver.setString(i, "test"+... );
stmt_ver.executeBatch();
connection_ver.commit();
}
//我想在这里完成线程
如何使用线程执行此操作?
答案 0 :(得分:1)
new Thread(new Runnable(){
@Override public void run(){
//enter code here
}
}).start();
编辑您想要并行插入多个线程...
有许多不同的可能性。
您应该阅读:并发(并发集合)和执行程序。
编辑2 我同意Thomas Uhrig的观点,在这里介绍线程可能更有害而不是祝福。 为什么你认为它会有所帮助?
答案 1 :(得分: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通常需要一些时间,因此可以缩短代码的执行时间。但要注意 - 线程并不容易。这是一个非常简单,天真的解决方案。 它可能会导致更多问题而不是它解决。如果你不熟悉线程(似乎你不是),那就不要做了!
答案 2 :(得分: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();
}
}
}
答案 3 :(得分: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()确定您要执行的插入操作的数量。希望你的意思是这个。