是否可以为 Java 中的多线程应用程序添加软件强制写入时复制?我的意思是线程具有对同一对象的引用,但是当一个线程尝试修改它时,所指向的对象被复制并且引用被调整为指向该副本。
问问题
498 次
3 回答
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
但这取决于您的需要。
于 2014-01-30T19:17:56.153 回答
2
如果你的问题是,
是否可以在整个 Java 运行时全面强制执行写入时复制行为
那么答案是,
不,Java 中没有这样的通用能力。
实际上,我认为最接近该目标的可能是使用 Clojure。它所有的默认数据结构在内部都是写时复制的,而在外部它们只是不可变的对象。
令人惊讶的是,您谈论的引用被称为ref
s 并且它们支持完整的内存事务。一种更简单的参考是atom
,它 100% 符合您的描述。
整个 Core API 致力于以线程安全、无锁的方式对这些结构进行优雅而令人印象深刻的操作。
于 2014-01-30T19:20:49.030 回答
1
是的。延迟复制很容易实现,但通常您必须自己完成。
于 2014-01-30T19:11:26.693 回答