1.在并发量和高的情况下
主要是防止资源使用冲突,保证同一时间内只有一个操作可以使用该资源。
但与synchronized的明显区别是性能优势(伴随jvm的优化这个差距在减小)。同时Lock有更灵活的锁定方式,公平锁与不公平锁,而synchronized永远是非公平的。
2.如果发现该操作已经在执行中则不再执行(有状态执行)
例如:用在定时任务时,如果任务执行时间可能超过下次计划执行时间,确保该有状态任务只有一个正在执行,忽略重复触发。
3.需要使用中断锁
synchronized与Lock在默认情况下是不会响应中断(interrupt)操作,会继续执行完。lockInterruptibly()提供了可中断锁来解决此问题。
参考高并发程序设计P75
4.如果发现该操作已经在执行,则尝试等待一段时间,等待超时则不执行(尝试等待执行)