Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;Lock可以让等待锁的线程响应中断,而synchroniz...
(1)Lock必须在finally块中释放 ,否则,如果在运行受保护的代码时,抛出了异常,那么该锁将永远不能释放,会形成死锁; (2)synchronized块必须完成的被包含在一个方法中,而 Lock对象 可以把 调用 lock()和 unLock()方法放在不同的方法里面; (3)synchronized不能保证进入访问等待的线程的访问循序,因此无法设置synchronize...
上面现象是多个线程同时去查询数据库的这一条数据,那么我们可以在第一个查询数据的请求上使用一个互斥锁来锁住它。(如果是单机,可以用synchronized或者lock来处理,如果是分布式环境可以用分布式锁就可以了(分布式锁,可以用memcache的add, redis的setnx, zookeeper的添加节点操作)) 其他线程走到这一步拿不到锁就等着,...