Java 通过超时以恒定可用性更新集合
是否有Java/Scala集合列表、数组或类似的东西在给定的超时后自动更新整个集合内容?但是有一个特性,更新将发生在另一个线程中,旧数据将在更新期间可用 我的例子是使用定期更新的集合来丰富Flink流,我从PostgreSQL获取这些集合的数据。我不需要为每条消息查询数据库。我每N分钟从表中下载一次完整的数据,并从表中选择*。我不想暂停更新数据。Viktor 我想缓存是您可以使用的最佳解决方案之一。但如果您不知道缓存,下面的答案将帮助您 解决方案 您可以使用TimerTask类及时运行特定的方法。下面这个简单的例子会给你一个想法 ListUpdater,它是TimerTask子项 导入java.util.TimerTask 公共类ListUpdater扩展TimerTask{Java 通过超时以恒定可用性更新集合,java,scala,flink-streaming,Java,Scala,Flink Streaming,是否有Java/Scala集合列表、数组或类似的东西在给定的超时后自动更新整个集合内容?但是有一个特性,更新将发生在另一个线程中,旧数据将在更新期间可用 我的例子是使用定期更新的集合来丰富Flink流,我从PostgreSQL获取这些集合的数据。我不需要为每条消息查询数据库。我每N分钟从表中下载一次完整的数据,并从表中选择*。我不想暂停更新数据。Viktor 我想缓存是您可以使用的最佳解决方案之一。但如果您不知道缓存,下面的答案将帮助您 解决方案 您可以使用TimerTask类及时运行特定的方法
@Override
public void run() {
// You can write your code to update your list.
System.out.println("Updating list");
}
}
应用程序类
公开课考试{
公共静态无效字符串[]args{
TimerTask task = new ListUpdater();
Timer timer = new Timer();
timer.schedule(task, 1000,6000);
}
}
在此示例中,计时器将每6秒打印一次“更新列表”消息,第一次执行时延迟1秒
java中有很多线程安全的集合,您可以自由使用其中的任何一个
ConcurrentLinkedQueue
阵列锁定队列
LinkedBlockingDeque
LinkedBlockingQueue
优先阻塞队列
同步队列
延迟队列
或者创建一个全新的线程安全列表:
List newList=Collections.synchronized listnew ArrayList;您可能需要使用一个缓存系统,该系统将根据生存时间、读/写通过等为您提供逐出策略。是的,使用JCache进行缓存可能是满足您特定需要的最佳方式,直到生存时间结束,您从缓存中获取数据,并且一旦数据被删除完成后,它将查询数据库并放入缓存。而且它是线程安全的。