我有一组必须同时执行的查询。为此,我为每个查询启动一个Runnable线程,通过迭代查询列表的while循环调用它。
线程执行每个查询,并计算每个查询执行所花费的时间。这是通过捕获获得差异的开始时间和结束时间来完成的。此时间应特定于每个查询,需要与相应的查询/
一起打印出来在这种情况下,我是否只需捕捉时间并显示?它会导致任何同步问题吗?
答案 0 :(得分:1)
在这种情况下,我是否只需捕捉时间并显示?会吗 导致任何同步问题?
我不知道,你呢?为什么不为每个Runnable
实例都有一个成员字段来跟踪执行所需的时间 - 然后当所有线程完成时,迭代Runnables
并显示数据。除了你之外谁还知道你的真实意图是什么。我所知道的只有两个同步问题:Deadlock& Race条件。这两种情况都不适用。
答案 1 :(得分: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代码中是这样。您可能在数据库中遇到问题 - 例如,尝试更新同一行的多个查询。