java语言 百分网手机站

Java中synchronized的使用实例

时间:2020-10-02 15:32:53 java语言 我要投稿

Java中synchronized的使用实例

  synchronized关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、D等)正在用这个方法,若有则要等正在使用synchronized方法的线程B(或者C、D)运行完这个方法后再运行此线程A,若没有则直接运行。下面小编给大家介绍Java中synchronized的使用实例,欢迎阅读!

  Java中synchronized的使用实例

  一、使用场景

  在负责后台开发的时候,很多时候都是提供接口给前端开发人员去调用,会遇到这样的场景:

  需要提供一个领奖接口,每个用户名只能领取一次,我们可以将成功领取的用户在数据库用个标记保存起来。如果这个用户再来领取的时候,查询数据库看该用户是否领取过。

  但是问题来了,假设用户手速很快,极短时间内点了两次领奖按钮(前端没有进行控制,我们也不能依赖前端去控制)。那么可能掉了两次领奖接口,而且有可能第二次调用的.时候查询数据库的时候,第一次领奖还没有执行完成更新领奖标记。

  这种场景就可以使用到synchronized

  二、使用实例

  代码:

  运行结果:

  从结果来看,可知道,synchronized起作用了,这里调用了两次syn(String userName)方法,期间设置其停留5秒,但是还是等第一次执行完,第二次调用才进入synchronized块里面的。

  为了进一步确认我们的假设,我们不防把synchronized去掉如下:

  运行结果:

  对比即可分析出来了

  使用方式从实例可看出来:

  用synchronized把代码括起来。


【Java中synchronized的使用实例】相关文章:

Java中Websocket使用实例解析12-03

Java中synchronized关键字的用法11-24

JAVA中If语句的使用10-03

Java中的多态用法实例分析11-29

Java中shuffle算法的使用12-03

java中通用的线程池实例代码11-29

Java中运算符的使用11-18

Java中的main()方法的使用讲解11-23

Java中ArrayList类的使用用法11-26