java - 这个 Hibernate Idiom 线程安全吗?
问题描述
问题
我需要确保在 Thread-A 上修改一组实体时,它们的更改会在 Thread-B 上同步更新。更改也不能阻塞 Thread-A,因此对象是分离的。当 Thread-B 更新实体时,不会对 Thread-A 上的实体进行任何更改。
问题
这个问题的最佳解决方案是什么?如果不是,那是什么?这个成语安全吗?如果是这样,为什么?
代码
第 1 步(线程 A):创建对象并存储在集合中
Collection<MyEntity> collection = ...;
MyEntity entity = new MyEntity();
entity.setValue(1);
collection.add(entity);
第 2 步(线程 B):持久化在线程 A 上创建的对象,然后分离
Session session = ...; // assume initialized
Transaction transaction = ...; // assume initialized
transaction.being();
session.persist(entity);
transaction.commit();
session.detach(entity);
步骤 3 (Thread-A):更新后,允许在 Thread-A 上修改对象。
第 4 步(线程 B):进行更多更改后,更新线程 B。
解决方案
推荐阅读
- git - gitlab自动部署期间如何保持文件权限?
- codenameone - 具有枚举属性的 PropertyBusinessObject
- php - Yii2 $model->_attributes 分配在新版本中不起作用
- c# - MagickImage - 无法读取 TIFF 图像
- javascript - 基于使用 javascript 的输出的多个复选框
- python - 熊猫:每次满足条件时计数器都会增加
- c# - AspNet Identity Core - 登录时的自定义声明
- mysql - MySQL Query with count(*) and group by
- javascript - 反应 setState 不覆盖对象
- python - 如何解决 python 3.6 中的列表问题?