您当前的位置: 首页 > 

在 web 业务开发中究竟该如何使用锁?

发布时间:2020-11-07 01:23:47 ,浏览量:0

0 Bug案例

demo 类

起俩线程分别执行add、compare

乍看,a、b“同时”自增,应一直相等,compare中判断不会为true。但看日志:不仅有ab有时也true。

评论区就笑了,这是你代码太垃圾,操作两个字段a和b,有线程安全问题,应该为add方法加锁,确保a和b的++原子性。

那就在add方法加锁

public synchronized void add() 

但加锁后问题并没解决。

1 为何锁能解决线程安全问题?

因为只有一个线程能拿到锁,所以加锁后的代码中的资源操作线程安全。

但该案例中的 add 始终只有一个线程在操作呀,显然只为 add 加锁毫无意义。所以因为两个线程是交错执行add、compare中的业务逻辑,而且这些业务逻辑不是原子性:a++和b++操作中可穿插在compare方法的比较代码。a

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0437s