Java-多线程写时复制

Java-多线程写时复制,java,copy-on-write,Java,Copy On Write,是否可以为Java中的多线程应用程序添加软件强制的写时拷贝?这里我指的是引用同一对象的线程,但当一个线程试图修改它时,指向的对象被复制,引用被调整为指向该副本。是。惰性复制很容易实现,但通常您必须自己实现。我知道的唯一实现是 java.util.concurrent.CopyOnWriteArrayList 看 以及相关的集合类 java.util.concurrent.CopyOnWriteArraySet 最后 org.apache.mina.util.CopyOnWriteMap

是否可以为Java中的多线程应用程序添加软件强制的写时拷贝?这里我指的是引用同一对象的线程,但当一个线程试图修改它时,指向的对象被复制,引用被调整为指向该副本。

是。惰性复制很容易实现,但通常您必须自己实现。

我知道的唯一实现是

java.util.concurrent.CopyOnWriteArrayList

以及相关的集合类

java.util.concurrent.CopyOnWriteArraySet
最后

org.apache.mina.util.CopyOnWriteMap
但这取决于你的需要。

如果你的问题是

是否可以在整个Java运行时全面实施写时拷贝行为

那么答案是,

不,Java中没有这样的通用功能

实际上,我认为最接近这个目标的方法就是使用Clojure。它的所有默认数据结构在内部都是写时拷贝,在外部它们只是不可变的对象

令人惊讶的是,您提到的引用被称为
ref
s,它们支持完全内存事务。一种更简单的引用是
atom
,它完全符合您的描述


整个核心API都致力于以线程安全、无锁的方式对这些结构进行优雅、高效的操作。

请详细说明。。有一点吗?因为这是目前措辞的问题,我必须投票表决。请用更好的解释进行编辑。我的意思是,根据您的要求,在Java中,当谈到跨线程共享的对象时,如果修改所述对象的内容时没有使用同步机制,这实际上就是您所拥有的。@BrianRoach不幸的是,你没有得到任何保证…@BrianRoach你所说的定义良好的行为不提供写时拷贝保证——而且,它对在数据竞争下修改的变量也不提供任何保证。