Java - 多线程写时复制

时间:2014-01-30 19:07:58

标签: java copy-on-write

是否可以为Java中的多线程应用程序添加软件强制执行写入?我的意思是线程具有对同一对象的引用,但是当一个线程试图修改它时,指向的对象被复制并且引用被调整为指向该副本。

3 个答案:

答案 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)

是。延迟复制很容易实现,但您通常必须自己完成。

相关问题