Locks can be monitored using v$lock or v$locked_object. The following query combines the best of both options. The "block" column indicates that a session is blocking.
You can use this query to identify blocking locks, or to examine all locks in case of a complex locking scenario (eg. session A blocks session B; session B blocks session C; ...)
select /*+ rule */ se.USERNAME, se.osuser, l.sid, l.type,
l.id1, l.id2, lmode, request, block, do.OBJECT_NAME, do.owner
from v$lock l, dba_objects do, v$session se
and l.sid=se.sid and l.id1=do.object_id(+)
order by block desc, l.sid;