项目是ssm的,需求是有两个方法a和b,a方法负责处理学生下线的操作(在线人数--,头像变为灰),b方法负责上线。经测试在学生端用户做刷新操作时会出现bug,表现为用户头像为灰,但在线人数正确。我的代码实现思路是在前端监听页面关闭事件,关闭前后台会受到消息,执行a方法,然后再执行b方法。但问题就出在这里,我无法保证刷新操作时两个方法的执行顺序

解决方案 »

  1.   

    监听下线操作,于是更新在线人数且将头像置灰,这个时候不需要执行b方法
    上线也只触发上线操作
    上下线,a、b方法二者之间应该是异步的不存在谁先谁后的概念,怕中间值变化不准确可以用同步锁、事务去保证唯一性
      

  2.   

    在线人数是一个内存变量,系统使用了websocket,当wensocket连接断开、连接时修改该变量。账号问题的话是只能一个人操作一个变量
      

  3.   

    刷新页面的时候会执行页面关闭的方法,在这个方法里处理下线的操作,刷新页面同时也会重新请求当前url,处理上线操作。我测试后发现这两个操作的执行顺序是不固定的。我有试过在上线的操作中判断下线的线程是否存在,如果存在wait,在下线的方法notify,但结果会导致上线方法卡死。