/*** 同时保存一个对象,需要有一个等待或退出*/public static final long SAVE_OBJ_ERROR_CODE_WAIT = -9L;/*** 保存正在保存的对象Id,保存完成后remove,如果保存前发现有相同Id的对象在该map中则说明上一次保存还未结束或有其他人正在修改同一对象,需要等待其完成后才继续操作*/private static final Map idMap = new ConcurrentHashMap();public long saveObj(Obj obj){String id = obj.getId()==null?"":String.valueOf(obj.getId());if (idMap.containsKey(id)){logger.error(obj.getName() + "(" + id + ")正在保存中,返回该次操作.");return SAVE_OBJ_ERROR_CODE_WAIT;}else{idMap.put(id, id);}try{return objdao.saveObj(obj);}finally{idMap.remove(id);}}

使用静态容器防止并发修改同一对象相关推荐

  1. java并发编程并发容器_Java并发编程:同步容器

    为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch).今天我们就来讨论下同步容器. ...

  2. 同步类容器与并发类容器

    一.同步类容器 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作.复合类操作:迭代(反复访问元素,遍历完容器中所有的元素).跳转(根据指定的顺序找到当前元素的下一个元素).以及条件运 ...

  3. Java并发(9)- 从同步容器到并发容器

    引言 容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,我前面的文章中对Java集合包中的关键容器进行过一个系列的分析,但这些集合类都是非线程安全的, ...

  4. 同步容器与并发容器类简介

    同步容器类   同步容器类包括Vector和HashTable,二者都是早期JDK的一部分,此外还包括在JDK1.2当中添加的一些功能相似的类,这些同步的封装类是由Collections.synchr ...

  5. mysql并发更新数据,多用户并发修改数据解决方案。

    mysql并发更新数据,多用户并发修改数据解决方案. 在系统中,有一些如余额.资产.积分的数据,是要保证数据一致性的.如,一个人使用两个设备同时进行消费操作,如何保证数据一致性的问题. 我们一起来思考 ...

  6. [WCF REST] 解决资源并发修改的一个有效的手段:条件更新(Conditional Update)

    条件获取(Conditional Update)可以避免相同数据的重复传输,进而提高性能.条件更新(Conditional Update)用于解决资源并发操作问题.如果我们预先获取一个资源进行修改或者 ...

  7. 理解和解决Java并发修改异常ConcurrentModificationException(转载)

    原文地址:https://www.jianshu.com/p/f3f6b12330c1 理解和解决Java并发修改异常ConcurrentModificationException 不知读者在Java ...

  8. java 并发修改_理解和解决Java并发修改异常ConcurrentModificationException

    your name.jpg 关键字: Java Exception 不知读者在Java开发的过程中有没有遇到类似的异常信息 Exception in thread "main" j ...

  9. 不要在递归中使用静态容器

    不要在递归中使用静态容器 这个很容易出BUG,且很难查.由于递归层次很深,容器可能反复的增加删除元素,不同层级之间的清空与增加极易造成难以察觉的冲突. 这个问题从10年前读书时写算法到现在已经遇到过不 ...

最新文章

  1. 重返全球第三,小米做对了什么?
  2. linux下开放端口
  3. Golang——数据类型转换(Sprintf、Format、Append方式转换)
  4. mysql数据库相关
  5. VBA合并csv文件
  6. java多线程之Executor框架
  7. LINUX下的GNU调试工具,GNU调试器 GDB 8.3 发布及安装更新,支持RISC-V与IPv6连接等
  8. Real World Haskell 第四章 函数式编程
  9. CAN FD:测量和重编程
  10. shell脚本:介绍、语法、运算、流程控制、对文件/输出流处理、案例
  11. python—scrapy框架爬虫—链家二手房数据
  12. 香港银行账户被关,应如何取走余额
  13. 发票核验API接口到底好用吗
  14. 方法: 跳转App Store更新你应用的URL究竟该怎么写
  15. 魅魔php影视系统,魅魔全新且强大的视频电影程序(MacCMS PHP) 6.1 20120511
  16. 面试官:说一说 Docker 原理
  17. 技校考计算机专业大专考什么科目,高职专科考试科目有哪些 考什么内容
  18. c语言判定三角形流程图_c语言编写程序:输入三角形的三条边,判断它们能否构成三角形,若能则指出何种三角形。...
  19. 自动测试如何选择自动化测试框架_机器擅长回归测试,人类善于寻找Bug _Pekka Klärck
  20. vue2[初级]事件处理器

热门文章

  1. 斯坦福大学博士后王鸿伟: 知识图谱辅助的个性化推荐系统
  2. 《A Point Set Generation Network for 3D Object Reconstruction from a Single Image》论文笔记_2D图像生成3D点云
  3. 通俗易懂!视觉slam第七部分——四元数
  4. 上百篇论文概览『负采样方法』的前世今生
  5. 服务器系统文档分类,服务器操作系统及分类
  6. 朋友圈发图多大不会被压缩_类风湿会不会引发肾病?会!本文告诉你对内脏的伤害有多大...
  7. 232 Crossword Answers
  8. windows下dlib库简介、安装问题解决及简单小例子 (python)
  9. 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层
  10. 交叉熵的本质是极大似然估计