java - 寻找在多线程平台上创建用户名的好方法

标签 java multithreading userid identity-management tivoli-identity-manager

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

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

最佳答案

This jar is being called by a multi-threaded application (ITIM). So how would I go about reserving zzxxx1 until the first user is finished being created so as to not have duplicate usernames.

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

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

关于java - 寻找在多线程平台上创建用户名的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18639877/

相关文章:

java - 用于 Java 的 JWT(JSON Web token )库

java - 尝试创建包时出现 "class, interface, or enum expected"错误

java - 我可以在 ios 开发的 xcode 项目中使用 java 库(Swiss Ephemeris)吗?

java - 注册自定义 Maven 原型(prototype)

python - python 中是否可以从子线程中杀死父线程?

multithreading - 在tomcat中使用多线程处理websocket incomming消息

c# - 同时从单个 Matlab dll 调用两个函数

java - 如何以 root 身份启动 Java 程序但降级为非 root 用户

php - joomla 2.5 根据外部表中的用户 ID 回显用户名

google-analytics - 设置用户 ID 后,Google Analytics Universal 不会跟踪页面浏览量或事件