是否可以为Java中的多线程应用程序添加软件强制执行写入?我的意思是线程具有对同一对象的引用,但是当一个线程试图修改它时,指向的对象被复制并且引用被调整为指向该副本。
答案 0 :(得分:2)
我所知道的唯一实现是
java.util.concurrent.CopyOnWriteArrayList
见
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/CopyOnWriteArrayList.html
和相关的Set类
java.util.concurrent.CopyOnWriteArraySet
最后
org.apache.mina.util.CopyOnWriteMap
但这取决于你的需要。
答案 1 :(得分:2)
如果你的问题是,
是否可以为整个Java运行时强制执行写入的写时复制行为
然后答案是,
不,Java中没有这样的通用功能。
实际上,我认为你可以达到目标的最接近的是使用Clojure。它的所有默认数据结构都是内部复制,而在外部它们只是不可变对象。
令人惊讶的是,您所谈论的引用被称为ref
,并且它们支持完整的内存中事务。一种更简单的参考是atom
,它适合您的描述100%。
整个Core API致力于以线程安全,无锁的方式对这些结构进行优雅和严谨的操作。
答案 2 :(得分:1)
是。延迟复制很容易实现,但您通常必须自己完成。