synchronized 锁只锁括号里面的代码内容,一个方法或者一个类等等。如果被锁的代码抛出异常会自动释放锁资源。
lock 锁锁定lock和unlock之间的代码,被锁的代码抛出异常不会自动释放锁资源,需要try catch 后在finally里面手动unlock释放锁资源。
lock锁可以同时执行多个read操作,但是只能同时一个write操作,所以lock锁在多资源竞争环境下效率较高,反之synchronized在资源竞争少的情况下更加安全可靠。
加锁时切忌锁定一些不必要的代码片段,如数据库操作等。