Groovy中Sql.execute()方法为同步还是异步执行?
回答
sql.execute()是同步执行的,这段代码里的循环会严格等待每一条DELETE语句执行完成后,才会进入下一次迭代,绝对不会并行发送多条语句。
原因很简单:
- Groovy的
Sql类底层依托JDBC实现,而JDBC标准的执行方法(包括execute)都是同步阻塞的——调用方法后,代码会停在这里,直到数据库返回操作结果(成功或抛出异常),才会继续执行后续代码。 - 你贴的这段for循环是普通的串行循环,没有任何异步、多线程或者并行处理的逻辑,所以每一轮迭代都会完整执行完
sql.execute()调用,再进行下一次循环。
如果要实现批量删除的并行执行,这段代码里必须显式加入异步处理的逻辑(比如借助线程池、Groovy的异步扩展等),但目前的代码完全没有这类设计,所以不用怀疑,就是串行执行的。
原提问代码:
for (int index = 0; index <= loopCnt; index++) { sql.execute("DELETE TOP(" + maxEntriesToDeleteAtOnce + ") FROM LoaderQueue WHERE Status = ? AND LastUpdated < ?", stateToDelete, date) }
内容的提问来源于stack exchange,提问作者user15076895
相关产品推荐
相关产品推荐

