【发布时间】:2013-09-18 14:31:55
【问题描述】:
我正在尝试使用java.util.concurrent.Executor 并行执行独立任务。
我有以下工作代码
public class MiniTest {
private static String[] input;
static {
input = new String[] {
"task1",
"task2",
"task3",
"task4"
};
}
public static void main(String[] args) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(2);
boolean atleastOnePoolStarted = false;
for (int i = 0; i < input.length; i++) {
Runnable worker = new WorkerThread(input[i] + i);
executor.execute(worker);
}
executor.shutdown();
executor.awaitTermination(15,TimeUnit.MINUTES);
System.out.println("Finished all threads");
}
}
这工作正常,我看到并行执行。
但问题是,当我将WorkerThread 替换为我的另一个类Runnable 并通过连接到数据库进行存储过程调用时。在这种情况下,线程正在启动,但对存储过程的实际调用似乎是以程序方式进行的,即第二个 java-proc 调用在第一个调用完成之前不会执行。
数据库部分工作正常,因为这是独立验证和测试的。我只需要同时踢2-3个电话。我使用 Sybase 作为数据库。
以前有人遇到过这个问题吗?请让我知道可能出了什么问题。
【问题讨论】:
-
您的
Runnable实现很可能是同步的,例如,只有1 个与它们必须共享的数据库的连接。显示“其他类”。
标签: java multithreading stored-procedures java.util.concurrent