DAO层需要做synchronized吗?

需要一个注册的功能,其中用户名是不允许重复的,如果将重名校验写在DAO层,是不是需要在方法上加synchronized呢?以确保在并发的时候注册账号不出现重名。

如果做集群,仅仅synchronized是不够的,要在数据库的名字字段加上unique约束才是王道

想要完全控制住,加唯一键约束.

即使给save方法加synchronized ,那意味着同时要在save方法里检查这个name在数据库里是否存在,不存在则保存,这一系列动作都在 synchronized 里,并发量大的话比较耗时...

使用有唯一约束,不使用synchronized ,可以将检验用户名是否重复的动作放在ajax里做.
即使有并发,也还有唯一键约束在,可以限制到,这样在save的时候也不用其他客户端去等待.

假如你的dao不是单例来取的,就不用synchronized。
假如是单例 并发的时候你把插入的那条sql执行方法体内部加上锁就可以了。这样可以提升性能。
synchronized这个东西假如加在你的dao的方法上,而你的dao又是单例的话,会造成你访问了这个方法的时候阻塞本类另外的一个synchronized方法,会很耗费性能的。

说到底你这个是数据的并发,而synchronized更多的体现在程序的并发上。
所以我推荐你用乐观锁的方式。比如你在注册表里面加一个int的字段index,当用户在注册的之前先查询一下这个字段,假如index加1了,说明在你注册的时候已经有人注册了,那么停止注册。当你完成注册的时候,再把那个字段更新+1.就可以了。

根据实际情况 决定