求助关于java web的方法执行顺序问题

tmac341 2019-06-18 02:23:19
项目是ssm的,需求是有两个方法a和b,a方法负责处理学生下线的操作(在线人数--,头像变为灰),b方法负责上线。经测试在学生端用户做刷新操作时会出现bug,表现为用户头像为灰,但在线人数正确。我的代码实现思路是在前端监听页面关闭事件,关闭前后台会受到消息,执行a方法,然后再执行b方法。但问题就出在这里,我无法保证刷新操作时两个方法的执行顺序
...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tmac341 2019-06-21
  • 打赏
  • 举报
回复
引用 2 楼 咸哼酒家 的回复:
监听下线操作,于是更新在线人数且将头像置灰,这个时候不需要执行b方法
上线也只触发上线操作
上下线,a、b方法二者之间应该是异步的不存在谁先谁后的概念,怕中间值变化不准确可以用同步锁、事务去保证唯一性

刷新页面的时候会执行页面关闭的方法,在这个方法里处理下线的操作,刷新页面同时也会重新请求当前url,处理上线操作。我测试后发现这两个操作的执行顺序是不固定的。我有试过在上线的操作中判断下线的线程是否存在,如果存在wait,在下线的方法notify,但结果会导致上线方法卡死。
tmac341 2019-06-21
  • 打赏
  • 举报
回复
引用 3 楼 maradona1984 的回复:
这个得有足够的实现细节才能判断
在线人数--是内存的变量--,还是数据库?
你们有很多人同时操作同一个帐号?

在线人数是一个内存变量,系统使用了websocket,当wensocket连接断开、连接时修改该变量。账号问题的话是只能一个人操作一个变量
咸哼酒家 2019-06-19
  • 打赏
  • 举报
回复
监听下线操作,于是更新在线人数且将头像置灰,这个时候不需要执行b方法
上线也只触发上线操作
上下线,a、b方法二者之间应该是异步的不存在谁先谁后的概念,怕中间值变化不准确可以用同步锁、事务去保证唯一性
maradona1984 2019-06-19
  • 打赏
  • 举报
回复
这个得有足够的实现细节才能判断 在线人数--是内存的变量--,还是数据库? 你们有很多人同时操作同一个帐号?
一一ZAJ 2019-06-18
  • 打赏
  • 举报
回复
你都说了先执行a方法再执行b方法,怎么会无法保证执行顺序,代码是一行一行执行的

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧