weixin_42361810 2010-04-01 12:06
浏览 241
已采纳

多线程更新静态数据的同步问题

在做一个程序,启动时从数据库读出静态数据存储到一个静态变量HashMap中,

提供给多个线程进行读操作,然后每隔一段时间(比如30分钟)再次从数据库更新
数据到此HashMap中,这样的逻辑需要怎样的锁来实现呢?是否应该用读写锁?

另外如何才能提高效率,同时保证线程安全?如果存储数据的容器是List又如何

实现?

更新HashMap线程逻辑代码:
[code="java"]
public void updateData() {

    // MyHashData就是存储静态数据HashMap<String, String>
    // 是不是应该用ConcurrentHashMap?

    // loadData是读取静态数据的函数,这样直接返回会不会有问题
    // 是不是应该MyHashData直接调用put函数来读取数据?

    // 如何加锁?
    MyHashData = loadData();

}
[/code]

其他线程逻辑代码:
[code="java"]
public void checkData() {

    // 如何加锁?
    if (MyHashData.containsKey(key)) {
        // 处理过程
        ...
    }

}
[/code]
  • 写回答

5条回答 默认 最新

  • iteye_10059 2010-04-02 22:25
    关注

    [quote]我也想过这样做,但是这样应该存在线程安全的问题吧,是不是应该加个锁?[/quote]

    你的Map对于很多线程都是只读的,你只要保证重新更新Map的是由一个线程来处理
    两个map的切换是原子操作,应该不会有同步问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作