copyonwrtie实现

最近看kafka和jafka等源码,发现里面的segmentlist,是一种copyonwrite实现。感觉是因为JDK里的实现没有提供类似truncate的方法,所以自己实现的。

JDK里面的copyonwritearraylist和copyonwritearrayset是利用volatile和lock来实现的,所有的读取操作无需加锁,而是返回当前内部对象数组的视图;而所有的修改操作都会先加排他锁(无法同时多线程更新),然后通过数组拷贝方法,重新创建一个对象数组,在新的对象数组上修改,然后将原来的引用指向新的对象数组。当写线程最后执行赋值操作,而其他线程同时读取时,虚拟机会提供同步机制,因为赋值是原子操作(除64位long和double),加上volatile提供可见性保证。

而kafka和jafka是使用atomicreference+while无锁CAS来实现copyonwrite的

你可能感兴趣的:(copyonwrtie实现)