gpt4 book ai didi

java - 在 Java 中的 while 循环中的 Thread.sleep() 之后不获取最新记录

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:17 24 4
gpt4 key购买 nike

这是我的代码

//This will load storeHeartbeat record from db
StoreHeartbeat storeHeartbeat = storeHeartbeatService.findByStoreId(context, locationId);
while (true)
{
if (storeHeartbeat.getCurrentHeatbeatDatetime().isAfter(jobTriggeredTime))
break;
else
TimeUnit.MILLISECONDS.sleep(300000);
//Again loading storeHeartbeat to get updated value.
storeHeartbeat = storeHeartbeatService.findByStoreId(context, locationId);
}

这里我有一个无限循环,我正在检查一个条件,如果条件匹配我想跳出循环,否则我想 hibernate 5 分钟,然后通过从数据库加载最新的心跳记录来重试.

问题:我没有得到更新的心跳记录,总是得到最初加载的旧记录,即使我正在更新记录(线程正在 hibernate )。

有什么建议我在这里错过了什么吗?是否有任何线程缓存持有旧值(value)?如果可以,我该如何实现?

注意:条件正常,没问题

编辑:这是我的 findByStoreId 方法

@Override
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public StoreHeartbeat findByStoreId(Context context, String storeId)
{
QStoreHeartbeatEntity qStoreHeartbeat = QStoreHeartbeatEntity.storeHeartbeatEntity;
JPQLQuery query = createQueryObject(context);
StoreHeartbeat result = (StoreHeartbeat) query.from(qStoreHeartbeat).where(
qStoreHeartbeat.storeId.eq(storeId == null ? "XXXXXXXXXXXX" : storeId)).uniqueResult(qStoreHeartbeat);
return result;
}

最佳答案

storeHeartbeat 是局部变量吗?如果是,则线程不缓存该变量,否则将 volatile 添加到您的类字段或使用 ThreadLocal 类。如果你使用hibernate,可能是hibernate cache的问题。更准确地说,我应该看到更多你的代码

关于java - 在 Java 中的 while 循环中的 Thread.sleep() 之后不获取最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49554095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com