18synchronized和java.util.concurrent.locks.Lock的异同?
Lock和synchronized有一点明显的区别——lock必须在finally块中释放。否则,如果受保护的代码将抛出异常,锁就有可能永远得不到释放!这一点区别看起来可能没什么,但是实际上,它极为重要。忘记在finally块中释放锁,可能会在程序中留下一个定时炸弹,当有一天炸弹爆炸时,您要花费很大力气才有找到源头在哪。而使用同步,JVM将确保锁会获得自动释放。一个Lock对象和一个synchronized代码块之间的主要不同点是:·synchronized代码块不能够保证进入访问等待的线程的先后顺序。你不能够传递任何参数给一个synchronized。·代码块的入口。因此,对于synchronized代码块的访问等待设置超时时间是不可能的事情。·块必须被完整地包含在单个方法里。而一个Lock对象可以把它的lock()和unlock()方法的调用放在不同的方法里。
来自:并发和同步-synchronized