0

我有一组必须同时执行的查询。为此,我为每个查询启动了一个可运行线程,从遍历查询列表的 while 循环中调用它。

线程执行每个查询,并计算每个查询执行所花费的时间。这是通过捕获开始时间和结束时间来获取差异来完成的。这个时间应该是每个查询具体的,需要和对应的查询一起打印出来/

在这种情况下,我只需要捕获时间并显示吗?它会导致任何同步问题吗?

4

2 回答 2

1

在这种情况下,我只需要捕获时间并显示吗?它会导致任何同步问题吗?

我不知道,你呢?为什么不为每个Runnable实例设置一个成员字段来跟踪执行所需的时间 - 然后当所有线程完成时,迭代Runnables并显示数据。除了你还有谁知道你的真实意图是什么。我只知道两个同步问题:死锁竞争条件。两者都不适用于这种情况。

于 2012-08-08T05:14:31.963 回答
1

这个问题太笼统了。会不会导致并发问题?或许。您是否在每个 Runnable 之间共享对象?如果你这样做,你可能有问题,如果你没有,那么没有。

例如,如果您的循环看起来像这样(此代码证明了一点 - 它不起作用):

for(int i=0;i<queries.size();++i){
     String query = queries.get(i);
     new Thread(new Runnable() {
        public void run() {
            //Execute the query
        }
    });
}

每个线程将执行它自己的查询而不访问一些共享数据——那么不,你不会有并发问题——至少在 Java 代码中是这样。您可能在数据库中遇到问题 - 例如,多个查询尝试更新同一行。

于 2012-08-08T06:28:49.440 回答