Java中的MultiThreading导致表锁定

时间:2014-05-21 06:17:30

标签: java multithreading oracle table-locking global-temp-tables

我正在使用batchUpdate插入Oracle表。五个不同的并行线程正在调用batchUpdate方法以插入到单个表中。 表是全局临时表类型。

程序执行未完成,在建立数据库连接后卡住了。

在单个全局临时表上运行的多个线程是否会导致表锁定并保持程序的执行?

我可以使用以下查询看到锁定的表 -

 select object_name, object_type from all_objects where object_id in (select object_id from v$locked_object);

2 个答案:

答案 0 :(得分:2)

是的,他们会。

如果两个不同的会话同时更新同一个表,则第二个会话将无法访问该表,直到第一个表完成更新(执行COMMIT)。 第一个会话实际上在该表上部署了一个'LOCK',直到它完成更新。

您可以在两个线程上完全同时更新完全相同的数据块吗?

维护数据一致性是ORACLE的功能。

答案 1 :(得分:0)

请发送该查询的输出。 Oracle支持多种类型的锁。其中一些可以共享(例如TM)。您在v $ locked_object视图中看到某些内容的事实并不意味着某些会话被阻止。

您的表很可能仅针对DDL(ALTER TABLE)语句被锁定。但不适用于DML。