gpt4 book ai didi

java - 在服务器端有一个后台线程定期更新请求使用的一些数据的最佳实践?

转载 作者:行者123 更新时间:2023-11-30 06:30:42 26 4
gpt4 key购买 nike

我有一个提供 REST API 的简单服务,我希望在该服务中有一个后台线程,定期从远程服务检索一些数据并将数据更新到一个对象,该对象也由请求使用。我的问题是在服务器端进行这种后台更新的最佳实践是什么?

为了获得最佳并发性,我最初的想法是简单地在对象上使用 volatile 并在后台线程中重置此指针,以便所有请求在更新后都可以看到它,这样就可以了查看对象旧版本快照的请求。这种实现有什么缺点吗? ReaderWriterLock 似乎是另一种选择,但对于这个来说太重了?

class Service
{
public volatile String data = "default";
public void handleRequest(Request req, Response resp)
{
resp.setBody(data);
}
}

class Background implements Runnable
{
private Service serv;
// ...
public void run()
{
serv.data = "reset to "+System.currentTimeMillis();
}
}

最佳答案

您的实现完全有效。 volatile 的主要目的正是以线程安全的方式在线程之间共享引用。除了 volatile 语义之外,ReaderWriterLock(以及任何锁定)允许一起执行复合操作(原子),而无需在线程之间交错。但是,由于您没有任何应该一起执行的复合操作,所以在您的情况下, volatile (比锁定便宜)就足够了。

您还可以发现 Executors.newSingleThreadScheduledExecutor() 对于调度后台任务很有用。

关于java - 在服务器端有一个后台线程定期更新请求使用的一些数据的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46203725/

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