java 并发的问题

我先贴一下代码:
boolean flag=false;
List list=null;
UserDao userDao=new UserDaoImpl();
UserBean userBean=new UserBean();
userBean.setUserName(userName);
userBean.setPassWord(passWord);
try {
list=userDao.findById(user.getUserName());
}catch(Exception e){
e.printStackTrace();
}
int result=0;
if(null!=list&&list.size()<=0){

        try {
            result=userDao.insert(user);
        }catch(Exception e){
            e.printStackTrace();
        }
        if(result==1){
            flag=true;
        }
    }
    return flag;
}

上面的代码,是我公司里面用到的其中的一些逻辑,但是这不是实际代码,这只是我自己另写的,自己用来测试的。
我的需求是,用户过来请求的时候,我先根据请求字段去数据库找有没有记录,有的话,就不保存了,没有的话,也就只保存一条记录,现在遇到的情况是,可能也是由于别人的恶意原因,突然间一秒之内并发过来十几个相同的字段,这样子前面的先查找,然后再根据判断结果就执行insert就不管用了,会插入到数据库里面好几条记录,我之前用了synchronized来处理了,但是效率不高,我看到java.util.concurrent包里面有个无界的并发队列,ConcurrentLinkedQueue但是用上去也不管用,不知道能不能这么用,用得对还是不对自己也不是很清楚,反正是我用apache的并发工具Jmeter测试并发1000个的话,还是会插入大量的数据到数据库。

下面是我使用的并发队列的例子:
boolean flag=false;
List list=null;
UserDao userDao=new UserDaoImpl();
UserBean userBean=new UserBean();
userBean.setUserName(userName);
userBean.setPassWord(passWord);
Queue queue=new ConcurrentLinkedQueue();
queue.offer(userBean) ;
UserBean user=queue.poll();
try {
list=userDao.findById(user.getUserName());
}catch(Exception e){
e.printStackTrace();
}
int result=0;
if(null!=list&&list.size()<=0){

        try {
            result=userDao.insert(user);
        }catch(Exception e){
            e.printStackTrace();
        }
        if(result==1){
            flag=true;
        }
    }
    return flag;

望大家给看下,并发队列怎么个用法!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!