请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为了避免并发线程问题,我们的处理使其线程安全,意味着 都是单线程排队执行吗?

你好,老师,请问一个问题,
我在面试中说到使用redis分布式锁处理并发秒杀问题,避免商品超卖。redis是单线程的,面试官 说那还是用的是单线程处理问题,他说这样会慢,
请问 多线程的并发的时候,为了线程安全,我们采用的那么多类和方法处理,避免了并发问题,这就意味着慢吗?意味着其他线程在排队等待执行任务吗?那位什么同比synchronized 我们用了一些并发处理手段,例如redis的锁,会快很多呢?

正在回答

1回答

你好,这里其实有好几个问题
首先秒杀是一个特殊的场景,避免超卖不一定要靠分布式锁,而且秒杀通常流量特别大,对资源争夺也特别强,因此使用分布式锁确实很慢很多,尽量设计成无锁的形式。
其次,并发其实是为了加速,但是并发存在潜在的线程安全问题,但线程安全不代表一定要加锁或者一定会慢,比如利用threadlocal线程封闭来保证线程安全。
然后,如果加锁,是肯定会带来一定的消耗的,但是线程安全是不得不解决的,因此可以考虑尽量避免资源竞争,在设计上采用以最小的代价解决线程安全问题即可。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕少7414720 #1
    非常感谢老师的答复,不仅解答了问题,还教我处理并发的思路
    回复 有任何疑惑可以回复我~ 2019-06-28 12:56:22
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信