我正在使用batchUpdate 插入Oracle 表。五个不同的并行线程正在调用batchUpdate方法来插入到单个表中。 表是全局临时表类型。
程序执行未完成,建立数据库连接后卡住。
多个线程操作单个全局临时表会导致表锁并卡住程序的执行吗?
我可以使用以下查询查看锁定的表 -
select object_name, object_type from all_objects where object_id in (select object_id from v$locked_object);
最佳答案
是的,他们会的。
如果两个不同的 session 同时更新同一个表,则在第一个表完成更新(执行 COMMIT)之前,第二个 session 将无法访问该表。 第一个 session 实际上在该表上部署“LOCK”,直到完成更新。
你不能真正通过两个线程同时更新完全相同的数据 block ,对吗?
这是ORACLE的一项功能,用于维护数据一致性。
关于java - Java中的多线程导致表锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23775370/