For DB2 9.7 and upwards, you can use "call monreport.LOCKWAIT" which will show who is holding and who is waiting on locks. Far easier than deciphering snapshots. There is also the Administrative view SYSIBMADM.MON_LOCKWAITS if you want to write your own queries/alerts.
Related to this, you may want to look at the DB CFG parameter LOCKTIMEOUT. The default for this is LOCKTIMEOUT = -1 which means wait forever. (Thanks IBM) Setting that to 30 or 60 seconds would see the waiting thread get a -911 SQLCode which would need to be handled in the application.