是否有Java / Scala集合(List,Array或类似的东西)在给定的超时后自动更新整个集合内容?但有一个功能是更新将在另一个线程中发生,旧数据将在更新期间可用。
我的情况是使用定期更新的集合来丰富Flink流,我从PostgreSQL获取数据。我不需要为每条消息查询数据库。我每N分钟从表中进行一次完整的数据下载(SELECT * FROM table)。我不想暂停更新数据。
答案 0 :(得分:2)
尤,
我想缓存是您可以使用的最佳解决方案之一。但是,如果您不了解缓存,以下答案将对您有所帮助。
<强>解决方案强>
您可以使用TimerTask类及时运行特定方法。以下简单示例将为您提供一个想法。
ListUpdater(它是一个TimerTask子级)
import java.util.TimerTask;
公共类ListUpdater扩展了TimerTask {
@Override
public void run() {
// You can write your code to update your list.
System.out.println("Updating list");
}
}
申请类
public class Test { public static void main(String [] args){
TimerTask task = new ListUpdater();
Timer timer = new Timer();
timer.schedule(task, 1000,6000);
}
}
在此示例中,计时器将每6秒打印一次“正在更新列表”消息,第一次执行时延迟1秒。
java中有很多线程安全集合。你可以自由使用其中任何一个。
或者创建一个全新的线程安全列表:
列出newList = Collections.synchronizedList(new ArrayList());