- 56
- 0
根据我在网上查到资料,表示GUID重复几率很小,但是我这边项目最近一启动,没过多长时间就会有重复的GUID生成,是我代码上面写的有问题吗?
具体代码如下:
public class AccountTaskExecutorTask extends TimerTask {
private static final Logger logger = Logger.getLogger(AccountTaskExecutorTask.class);
private TellerDbCore.AccountTask.Builder aTask = null;
public AccountTaskExecutorTask(TellerDbCore.AccountTask.Builder aTask) {
this.aTask = aTask;
}
public static void schedule(TellerDbCore.AccountTask.Builder aTask) {
Timer timer = new Timer();
timer.schedule(new AccountTaskExecutorTask(aTask), 100L);
}
@Override
public void run() {
try {
process(aTask);
} catch (Exception e) {
logger.error("", e);
}
}
public static void process(TellerDbCore.AccountTask.Builder aTask) {
DataBaseStore dataBaseStore = null;
try {
dataBaseStore = DbHelper.getTransactableDbStore();
invest(aTask, dataBaseStore);
dataBaseStore.commitAndClose();
dataBaseStore = null;
} catch (Exception e) {
logger.error("", e);
if (dataBaseStore != null) {
dataBaseStore.rollbackAndClose();
dataBaseStore = null;
}
}
}
private static void invest(TellerDbCore.AccountTask.Builder theTask, DataBaseStore dataBaseStore) throws Exception {
if (theTask.getProductType() == BtsDbBase.ProductType.PT_NONE_LOCK
|| theTask.getProductType() == BtsDbBase.ProductType.PT_LOCK_3
|| theTask.getProductType() == BtsDbBase.ProductType.PT_LOCK_7) {
switch (theTask.getTaskStatus()) {
case TS_READY:
List<TellerDbCore.AccountSubTask.Builder> subList = AccountTaskHelper.querySubAtByMtId(theTask.getTaskId(), dataBaseStore);
if (subList.size() == 0) {
NewMethods.newAccountSubTask(theTask.getTaskId(), GUID.generateGUID().toLowerCase(),
theTask.getAccountId(), theTask.getProductType(), theTask.getTaskType(), theTask.getAmount(), dataBaseStore);
}
UpdateMethods.updateAccountTask(theTask.getTaskId(), null, BtsDbBase.TaskStatus.TS_PROCESSING, dataBaseStore);
break;
case TS_PROCESSING:
List<TellerDbCore.AccountSubTask.Builder> subTaskList = AccountTaskHelper.querySubAtByMtId(theTask.getTaskId(), dataBaseStore);
if (subTaskList.size() == 1) {
TellerDbCore.AccountSubTask.Builder aSubTask = subTaskList.get(0);
VirtualDbBase.TaskStatus vTs = VirtualConnector.queryTaskStatus(aSubTask.getVrNo(), null);
if (vTs == null) {
VirtualConnector.submitTask(theTask.getAccountId(), BizConstant.VIRTUAL_SYS_INTERMEDIARY,
aSubTask.getAmount() / 100, aSubTask.getVrNo(), VirtualDbBase.TransferType.TT_INVEST,
theTask.getRequestNo());
}
} else {
throw new RuntimeException(ErrCode.SYSTEM_ERROR);
}
break;
case TS_SUCCESSED:
case TS_FAILED:
break;
default:
logger.info( theTask.getTaskStatus());
break;
}
}
}
}
这段代码里面是通过GUID.generateGUID().toLowerCase()来生成GUID,它是oscore-2.2.4.jar包下的类方法。
- 共 0 条
- 全部回答
-
金牛座守护神 普通会员 1楼
在编程中,Guid(全局标识符)是一种特殊的标识符,它由十六进制字符和一个或多个小写字母和数字组成,用于在程序中唯一标识一组数据。在编程语言中,Guid的设计目的是为了提高程序的可读性和安全性,因为它们可以被计算机识别并唯一标识特定的内存地址,从而避免同一块内存地址被多次访问或赋值,防止数据的不一致性和安全性问题。
Guid的重复问题可能有以下几种情况:
- 在循环中: 如果在循环中使用Guid作为标识符,由于每次循环的标识符是唯一的,所以可能会出现Guid重复的情况。例如:
python for i in range(10): id = Guid(i) print(id)在这种情况下,Guid会在每次循环迭代时生成一个唯一的值,因此每次打印都会看到不同的Guid。
- 在全局函数中: 如果在全局函数中使用Guid作为标识符,由于函数是全局的,所以可能会导致Guid重复。例如:
python def global_func(): id = Guid("global_function_id") print(id)在这种情况下,Guid将在函数内部生成一个唯一的值,然后在函数外部调用时打印出该值,所以无论函数被调用多少次,都会看到不同的Guid。
- 在类或对象中: 如果在类或对象中使用Guid作为标识符,Guid的值在类或对象的实例初始化或创建时会自动生成,从而避免Guid的重复。例如:
```python class MyClass: def init(self, guid): self.guid = guid
def get_guid(self): return self.guid def set_guid(self, new_guid): self.guid = new_guid def __str__(self): return f"MyClass({self.guid})"my_object = MyClass(Guid("unique-guid")) print(my_object.get_guid()) # 输出: MyClass(unique-guid) print(my_object.set_guid("new-guid")) # 输出: MyClass(unique-guid, new-guid) print(my_object.get_guid()) # 输出: MyClass(unique-guid) ```
在这种情况下,Guid在类或对象的实例初始化或创建时会被自动生成,所以即使类或对象被创建多次,Guid也不会重复。
- 在全局变量中: 如果在全局变量中使用Guid作为标识符,Guid的值在变量被初始化或赋值时会自动生成,从而避免Guid的重复。例如:
```python def global_func(): global Guid Guid = Guid("global_func_guid")
# 假设global_func()调用多次,Guid的值也会被自动更新 print(Guid)global_func() ```
在这种情况下,Guid在全局函数的调用中被自动生成,即使global_func()调用多次,Guid的值也不会重复。
综上所述,Guid的重复问题可能有多种情况,包括在循环、全局函数、类或对象、全局变量等场合。在编写代码时,应尽量避免使用Guid作为标识符,如果需要,应确保Guid的值在每次使用时都具有唯一性,并确保Guid在不同使用场景下的值是自动更新的。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
