u013845177
<yinweijian>
2017-11-02 14:50

接口并发,由于Service层处理时间长,导致数据有误,诚心请教

8
  • 并发

业务是这样的,输入用户名,判断用户不存在就添加,存在就不添加。service层代码如下(简化了):

public  Object ut() {
    // 判断用户db是否存在
    User u = userDao.findByUserName("db");
    if(u != null) {// 存在就返回1
        System.out.println();
        System.out.println("【有】");
        System.out.println();
        return 1;
    }else {// 不存在就添加
        u = new  User();
        u.setUserName("db");
        u.setPassword(System.currentTimeMillis()+"");
        userDao.save(u);
        System.out.println("【无此用户】");
    }
    for(long i = 0;i<88888888L;i++) {// 模拟service执行了3-5秒
        String a = ""+i;
    }
    return 0;
}

在for循环那里,我特地让这个方法执行3-5秒才能完成,那么问题来了,接口来了10个并发时
(数据库里没有db这个用户),控制台都是打印【无此用户】,然后就添加了10条记db用户的记录,而我想要的只有一条db用户记录,这种情况怎么解决,一开始我在controller层加上同步是可以,但是同步就慢了,,,请问这个情况怎么才能让数据里只有一条db用户的信息

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

3条回答