0

我目前有一套规则来根据用户的姓名首字母创建用户名。这是不可调节的。因此,用户将“xxx”作为他的首字母。他的用户名是 zzxxx1。下一个具有相同首字母的用户是 zzxxx2 等等。我正在使用 Java 生成 ID (useridCreation.jar)。多线程应用程序 (ITIM) 正在调用此 jar。那么我将如何保留 zzxxx1 直到第一个用户创建完成,以免有重复的用户名。这是生成用户名的提要类型情况。我最多可以拉 4 个用户/秒。我在考虑 Vector,但我对多线程应用程序不太熟悉,所以我不确定如何处理。SQL 表是另一种选择,但我觉得即使并发注销,也会有一些问题。我锁定/解锁的文件呢?是否有人为此类问题实施了可靠的解决方案?

编辑:我忘了提到这是一个集群环境。

4

1 回答 1

2

多线程应用程序 (ITIM) 正在调用此 jar。那么我将如何保留 zzxxx1 直到第一个用户创建完成,以免有重复的用户名。

如果这是一个集群配置(即在多个服务器上运行的分布式应用程序),那么您将不得不拥有某种中央服务来保证名称的唯一性。一种简单的解决方案是在某些表中的用户名字段上具有唯一约束的数据库。每个服务器都可以执行类似有序LIKE查询的操作,以找到最高的用户名编号,然后尝试使用下一个编号创建条目。如果它被占用,它会用下一个号码再试一次......

另一种解决方案是拥有一个中央服务来保证唯一性。所有集群节点都将联系中央节点,中央节点将使用一个synchronized或其他锁来确保一次只有一个线程生成唯一名称。然后我再次假设您需要持久性,因此数据库可能是最简单的选择。

于 2013-09-05T15:22:16.920 回答