Java中的CopyOnWrite

CopyOnWrite简称COW,是一种程序设计的一种优化的策略方法,他开始的思想就是大家一起共享一件东西或商品,当一个人想要改这个事物原有的状态时,会重新复制一份出去,然后再新的事物上面改他所需要的东西,而不会影响以前的事物,然后再将原有的事物的引用到新的事物上来,思想类似于延时懒惰策略的方法,在jdk1.5之后,java出来了CopyOnWriteList和CopyOnWriteSet两种。

CopyOnWrite也是一个容器,当大家都对这个容器做查看的时候,一个人想要添加水到容器的时候,这个容器会复制一份出来,让这个人加水,但是其他的人还可以继续对原有的容器做查看操作,等水添加完成后,原有容器会对新容器加一个引用,说明容器的水都可以查看,这样我们既可以查看原有的容器里有多少水,也可以查看加了多少水,这个是一个读写分离的思想。

时间: 2024-12-09 13:15:39

Java中的CopyOnWrite的相关文章

并发-Java中的Copy-On-Write容器

Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略.从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet.CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到. 什么是CopyOnWrite容

【Todo】Java中的Copy-on-Write容器 & ConcurrentHashMap & HashTable比较

参考这篇文章:Link 另外还有两篇ConcurrentHashMap,以及比较HashMap 和 Hashtable http://m.blog.csdn.net/article/details?id=40834595 https://zhidao.baidu.com/question/350410456.html

JAVA中写时复制(Copy-On-Write)Map实现

1,什么是写时复制(Copy-On-Write)容器? 写时复制是指:在并发访问的情景下,当需要修改JAVA中Containers的元素时,不直接修改该容器,而是先复制一份副本,在副本上进行修改.修改完成之后,将指向原来容器的引用指向新的容器(副本容器). 2,写时复制带来的影响 ①由于不会修改原始容器,只修改副本容器.因此,可以对原始容器进行并发地读.其次,实现了读操作与写操作的分离,读操作发生在原始容器上,写操作发生在副本容器上. ②数据一致性问题:读操作的线程可能不会立即读取到新修改的数据

java中的数据结构总结

Java的类库实在是很多,以至于很多人都不太了解,结果总是自己造轮子. 下面汇总了Java中的一些数据结构,加上一些实现的分析,同时备忘. 至于时间复杂度,个人觉得写出来的用处不大.如果明白它是怎么实现的,那自然就知道它的时间复杂度. 如果不理解它的实现,把时间复杂度背得再熟也没用. 接口: Collection<E> 子接口: BlockingDeque<E>, BlockingQueue<E>, Deque<E>, List<E>, Navi

Java 中的线程管理概念梳理

在Java中,"线程"指java.lang.Thread类的一个实例以及线程的执行,主要使用的线程池是ThreadPoolExecutor以及ScheduledThreadPoolExecutor,要使用固定线程上限的线程池. 用synchronized 修饰静态方法时,表示任何两个不同线程的调用互斥:修饰成员函数时,表示同一对象的多线程方法调用互斥:当然了,synchronized 后的参数可以是任意对象.Synchronized保证了synchronized块中变量的可见性,而vo

Java中的forin语句

forin的原理 forin语句是JDK5版本的新特性,在此之前,遍历数组或集合的方法有两种:通过下标遍历和通过迭代器遍历.先举个例子: @Test public void demo() { String arr[] = { "abc", "def", "opq" }; for (int i = 0; i < arr.length; i++) {//通过下标遍历数组 System.out.println(arr[i]); } System.

java中并发包里面的内容

java中的并发包里面的内容 1.CyclicBarrier 一个同步辅助类,允许一组线程相互等待,直到这组线程都到达某个公共屏障点.该barrier在释放等待线程后可以重用,因此称为循环的barrier. 来个示例: package test; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;

Java并发编程:Java中的锁和线程同步机制

锁的基础知识 锁的类型 锁从宏观上分类,只分为两种:悲观锁与乐观锁. 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作.Java中的乐观锁基本都是通过CAS操作实现的,CAS是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败. 悲观

Java 中的 final、finally、finalize 有什么不同?

Java 中 final.finally.finalize 有什么不同?这是在 Java 面试中经常问到的问题,他们究竟有什么不同呢? 这三个看起来很相似,其实他们的关系就像卡巴斯基和巴基斯坦一样有基巴关系. 那么如果被问到这个问题该怎么回答呢?首先可以从语法和使用角度出发简单介绍三者的不同: final 可以用来修饰类.方法.变量,分别有不同的意义,final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override).