锁与分布式

面试官:如果我给用户发了一个优惠券,是通过短信下发的,然后夫妻2人同时,分别,到2家门店去用这个券,你怎么防止这个券被用2次。
我:上锁解决,以券码为key,能获取到锁的就让用,反之则提示已经使用。
面试官:你的锁是指synchronize吗?
我:对,还可以用reentrantlock (来,快考我他们的区别)。
面试官:用synchronize的话,以券码为key,key如果不是一个对象能锁上吗?
我:.......
我:不能,(思考2分钟),哦,可以用String的intern,只要码一样,他们指向的常量池对象是一样的。
面试官:嗯。现在线上都是集群了,你觉得synchronize能锁的上吗?
我:.......
我:如果是集群的话,确实锁不上,可以用分布式锁解决。
面试官:嗯,说说都有哪些实现,原理是什么。
我:可以用redis、zk、etcd 这些中间件。肯定还有别的中间件。
原理balababla.......
面试官:嗯。

你可能感兴趣的:(锁与分布式)