1. 背景

字典或者模型加载经常会用到双buffer这样读多写少的数据结构。在C++的时候会经常用到brpc里面的双buffer实现。具体可以参考:https://blog.csdn.net/Al_xin/article/details/104030457

在这里采用Java的api实现。在Java当中volatile语义可以实现在多个线程的内存可见。可以保证串行访问,从而避免各种加锁的实现。

2. 实现例子

    public static int i = 0;public static volatile Map<String, String> dict = new ConcurrentHashMap<>();public static ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);// http or local file get dictstatic void getDict() {i++;Map<String, String> data = new HashMap<>();data.put("A", Integer.toString(i));dict = data;}// Initstatic void init() {getDict();}// Timer to update the dictpublic static void scheduleTimer() {executor.scheduleWithFixedDelay(new Runnable() {@Overridepublic void run() {try {getDict();} catch (Exception e) {e.printStackTrace();}}}, 0, 10, TimeUnit.SECONDS);}// Main函数调用:public static void main(String[] args) {init();scheduleTimer();for (; ; ) {System.out.println(dict);try {Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();}}}

Java 异步更新数据相关推荐

  1. mongodb java 更新数据_MongoDB JAVA API更新数据示例

    [java获得数据库信息常用API(DatabaseMetaData)示例] /** * MongoDBTest * MongoDB更新数据使用示例 */ package com.labci.mong ...

  2. 日常随笔: React useEffect中使用异步更新数据方法遇到的问题

    开发随笔:react hooks 异步更新的问题 1. 问题叙述 在使用antd/G2图表更新的时候发现:在useEffect中通过异步函数对图表渲染的data进行更新, 但是由于第一次更新后,数据是 ...

  3. java jpa更新数据_Java如何使用JPA更新实体对象?

    在此示例中,您将学习如何在JPA中更新实体对象.我们使用该EntityManager.merge()方法来更新实体.此方法将要保存的实体作为参数,然后将合并的实体作为结果返回. 您可以在下面的代码片段 ...

  4. WinForm 界面异步更新数据(方式二)

    在WINForm开发过程中,我们经常遇到填充比较多的数据到界面时,有时候界面卡死啦,这时候我们最好的办法是采用线程来对数据进行收集,然后再体现在界面上. 1.第一种是比较繁琐的采用异步进行操作. 创建 ...

  5. Flutter StreamBuilder 异步更新数据

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 [x2]各种系列的视频教程 ...

  6. Flutter ValueNotifier 异步通信、ValueListenableBuilder异步更新数据

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 [x2]各种系列的视频教程 ...

  7. wpf在presenter(VM)中异步更新viewer中数据

    在MVP或者MVVM模式中,VM和Presenter通过binding与Viewer交换数据.在实际项目中,往往需要动态刷新界面的数据.本人一般通过刷新与之绑定的属性变化完成.但是,如果遇到数据量较大 ...

  8. JAVA异步爬虫_Java 爬虫遇上数据异步加载,试试这两种办法!

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  9. JAVA中.jsp模板文件AJAX异步请求 - 数据渲染问题

    JAVA中.jsp模板文件AJAX异步请求 - 数据渲染失败,谁的过失? 后端已经查询出来结果,但是返回的API接口response查看不到对应的信息.(即:后台有,前台没有) 原因分析: 是因为AJ ...

最新文章

  1. PyTorch官方培训教程上线:从基本概念到实操,小白也能上手
  2. HZOJ 斐波那契(fibonacci)
  3. Column 'Status' in where clause is ambiguous
  4. 指针数组的初始化和遍历,并且通过for循环方式、函数传参方式进行指针数组的遍历...
  5. ORACLE表空间的相关操作
  6. matlab向量的模_基于MATLAB使用矩阵方法求解一维定态薛定谔方程
  7. 只允许运行一个实例的方法
  8. 4-具体学习git--分支
  9. 一个Linux中用于监控的简易shell脚本
  10. 常用Keytool 命令
  11. Atitit 卡片管理指南规范 attilax总结(内部身份卡,饭卡,交通卡 银行卡等)
  12. 删除Linux Terminal中的历史记录
  13. 华为公有云,一个关于天分与勤奋的故事
  14. BadDet: Backdoor Attacks on Object Detection——面向目标检测的后门攻击
  15. 网关Gateway的介绍与使用
  16. 范仲淹写苏州名胜的诗篇
  17. MySQL错误:Column ‘pno‘ in field list is ambiguous是什么问题呢?
  18. Visual Studio 2012 编译C
  19. 【Java】斗地主和斗牛游戏
  20. 【sql查询】使用sql查询一个物品是否在有效期内的方法(数据库无这个字段 通过生产日期和保质期进行计算得出)

热门文章

  1. 【折腾日记GEN8_0】预算及汇总
  2. python安装模块的2种基本方式
  3. Ubuntu 安装jdk17详细配置教程
  4. 关于Android中layout_centerHorizontal、layout_gravity、gravity的区别
  5. 学习 Python 之 Pygame 开发坦克大战(五)
  6. airpods二代降噪吗_第三代AirPods爆料,有望年底推出,支持防水改进部分设计
  7. linux-----压缩解压缩文件夹、文件命令详解
  8. 头条号注册不分领域了,可以自己换一个领域写文么?
  9. Lucene(八)拓展1-结巴分词(java版) jieba-analysis
  10. 老赵减肥记:减肥?跟玩儿似的。