gpt4 book ai didi

Java 守护线程未获取更新的变量

转载 作者:行者123 更新时间:2023-12-01 14:56:51 25 4
gpt4 key购买 nike

我的程序中有一个内存缓存(类缓存),它作为单例类实现,而单例类又使用同步映射。到目前为止,超时设置为 4 小时并且运行良好。在尝试将其更改为 4 分钟时,isTimedOut 的行为很奇怪并且返回 false(即使在访问时间早于 4 分钟之后)。在调试时,我发现它仍然使用 4 小时作为超时。但是,如果我将 sysout 放入 isTimedOut 方法中(例如 sysout("")),则该方法将获取新值 => 4 分钟!

有什么建议/指示吗?

class Cache implements Runnable{
public static final long timeout=4*60*1000;//4 mins
static {

cache = new Cache();
Thread myThread= new Thread(cache );
myThread.setDaemon(true);
myThread.start();
}

private Map map = Collections.synchronizedMap(new HashMap());

public void add(CacheObj o){
cache.add(somestr, o);
}

public void run(){
if(cache.isTimedOut(){
//delete from cache
}
}

class CacheObj{
Date accessedTime;
boolean isTimedOut(){
Date timeOut = new Date(accessedTime.getTime() + Cache.timeout);
Date now = new Date();
return (now.getTime() > timeOut.getTime());
}
}

...
}

最佳答案

如果您在代码中更改了它,则可能是编译或部署问题。

尝试添加 JOptionPane.ShowMessageDialog("v1");查看 jboss 是否确实在使用您的新代码。

关于Java 守护线程未获取更新的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245891/

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