Java。多线程环境中对象的序列化
否。正如@Tom Hawtin所说,您将需要执行自己的锁定,以确保在序列化对象时不会更改对象。@H_502_7@它是如何工作的?也就是说,ObjectOutputStream是否将执行序列化块,直到不再有任何线程在Counter上运行了?
ObjectOutputStream@H_403_16@不会在引擎盖下锁定。如有必要,由应用程序决定。@H_502_7@如果Counter的同步不使用固有锁,而是使用其他锁怎么办?
然后,在序列化发生时,您的应用程序还需要使用其他锁定来锁定更新。@H_502_7@
如果您要序列化的状态仅由一个对象的状态和两个字段组成,则锁争用和粒度应该不成问题。但是,如果对象很复杂,那么锁争用就很成问题了,获取锁而又没有死锁风险的问题也很成问题。这种情况需要仔细设计。@H_502_7@解决方法
我有一个对象,其内部可变状态正在由一个或多个线程不断更新。对象已同步,目标是从另一个线程定期保存其状态(通过序列化):
public class Counter implements Serializable { private int dogCount; private int catCount; public synchronized void updateFromDogThread( int count ) { dogCount = count; } public synchronized void updateFromCatThread( int count ) { catCount = count; }}
问题:
在这种情况下,序列化安全吗?它是如何工作的?也就是说,ObjectOutputStream执行序列化是否会阻塞直到不再有线程运行Counter?如果Counter同步不使用固有锁,而是使用其他锁怎么办?相关文章:
1. python - 用urllib抓取网页上的下载链接,目标文件是xls形式,但发现抓下来的xls是空表,里面只有一句报错信息,求帮助。2. python3.x - python 中的maketrans在utf-8文件中该怎么使用3. javascript - 一排三个框,各个框的间距是15px,距离外面的白框间距也是15px,这个css怎么写?4. javascript - immutable配合react提升性能?5. javascript - vue 手机端项目在进入主页后 在进入子页面,直接按返回出现空白情况6. javascript - jQuery post()方法,里面的请求串可以转换为GBK编码么?可以的话怎样转换?7. mysql - C#连接数据库时一直这一句出问题int i = cmd.ExecuteNonQuery();8. django - python 2层文件夹导入9. html5 - vue-cli 装好了 新建项目的好了,找不到项目是怎么回事?10. html5 - javascript写业务有用到什么编程范式没?

网公网安备