三个看似简单但不容易解决的设计问题

1.A操作把一条记录状态改为1,B操作把状态改为2,这个记录可能在数据库里,也可能在内存里,不重要,就是可能存在多种状态,如果A操作先执行,B操作后执行,状态该是2,但如果因为网络延迟等原因,B操作先执行完成,那数据就被覆盖成了1,不符合现实情况,我只能控制其执行顺序,不能控制执行完成顺序,如何解决。
2.在方法中,A对象改变了一组属性,B对象改变了一组属性,那现在如果出现异常或返回值错误,整体操作失败,那执行完操作的属性如何回滚,还是这种设计就不合理,那该怎么设计。
3.用户注册的常见问题,查询用户名时,用户名可用,可这时候两人同时注册就都发到数据库了,数据库再唯一性出错返回了,大家都是怎么处理的,怎么加锁。

大家谈谈经验啊 万分感谢!

使用多线程啊,还有synchronized

下面是有关锁机制的博客。你可以了解一下
http://blog.csdn.net/yangzhijun_cau/article/details/6432216

你这些问题涉及到同步阻塞的原理,你能问出这些问题,说明你对java的多线程几乎是零基础,先不说java,其它很多框架都提供了事物管理的功能,例如spring的AOP
还有数据库的四种特性,你这样问问题,还不如自己去百度一下,结合例子自己亲自动手试一试

1:可以在操作的时候加时间判断,如果数据库现有数据时间在正在更改的时间之后,就不进行覆盖
2:楼上那种加锁

能控制其执行顺序,那么被执行的方法使用同步锁 synchronized

问题一可以加锁,问题二可以把他们放在同一事务里,出异常直接事务回滚,问题三,数据库处理肯定有先后啊,先执行的成功,后执行的失败返回错误信息