Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在寻找一种在多线程平台上创建用户名的好方法_Java_Multithreading_Userid_Identity Management_Tivoli Identity Manager - Fatal编程技术网

Java 正在寻找一种在多线程平台上创建用户名的好方法

Java 正在寻找一种在多线程平台上创建用户名的好方法,java,multithreading,userid,identity-management,tivoli-identity-manager,Java,Multithreading,Userid,Identity Management,Tivoli Identity Manager,我目前有一套基于用户姓名首字母创建用户名的规则。这是不可调整的。因此,用户的首字母是“xxx”。他的用户名是zzxxx1。下一个具有相同首字母的用户将是zzxxx2,依此类推。我正在使用Java生成ID(useridCreation.jar)。多线程应用程序(ITIM)正在调用此jar。那么,在创建完第一个用户之前,我将如何保留zzxxx1,以避免出现重复的用户名。这是一种正在生成用户名的提要类型的情况。我每秒最多可以吸引4个用户。我在考虑Vector,但我对多线程应用程序不太熟悉,所以我不确定

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

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

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

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


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

@Gray这是一个集群环境。所以我想DB是我唯一的选择对吗?我已经把我的评论移到了一个答案上。我最初的“保留”检查是用户目录(ldap)。因此,在ldap中创建用户记录之前,我只需要持久性。我非常喜欢基于服务的同步方法。但是就像你说的那样,db会更容易,我很快就用光了这个项目的时间。非常感谢你抽出时间。