一般websercvice服务端,可以同时接收多个客户端发送的信息,并且保存数据库;
基础的写法是
1)根据关键字查询数据库表是否存在数据
2)判断查询到的消息是否存在
3)
3.1不存在数据,调用insert
3.2存在数据,调用update
上面的写法一般不会出错;
多线程的模式下,会出现一种情况是 例子描述:线程1:根据关键字查询了数据表没对应的数据,准备insert的时候,线程2进来一条同样的信息,根据关键字查询了数据表;同一时间点,线程1是还没insert事务提交完成,数据库表也是没有数据的,线程2 查询没有对应数据,同样调用了insert; **导致同一条数据insert两次** 为了应对这种情况,可以添加同步锁 例子: **synchronized(this){//同步锁** a (//返回的数据)=select(查询语句); if(a==null||a.equals("***")){//判断是否存在 insert() }else{ update(); } **}**
那么程序执行到这一步的时候,如果有数据在执行中,那么会等待完成后,在执行;
以上 *** 作 试用单个服务器的情况;如果多个服务器模式,synchronized 无法阻止同一条信息多次insert
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)