Thanks for looking at this code closely.  Now that I have incorporated some of Phil's other suggestions,I think the following is true:
1) Only one thread will successfully obtain the lock at any time
2) The thread holding the lock will always release it (because of the unlock in the finally block)