question: private void addPool ( ) { int newNumPools = ( int ) Math . ceil ( numPools * POOL_GROWTH_FACTOR ) ; numPoolsCounter . incr ( newNumPools - numPools ) ; RegularDegreeEdgePool [ ] newEdgePools = new RegularDegreeEdgePool [ newNumPools ] ; int [ ] newPoolDegrees = new int [ newNumPools ] ; System . arraycopy ( readerAccessibleInfo . edgePools , 0 , newEdgePools , 0 , readerAccessibleInfo . edgePools . length ) ; System . arraycopy ( readerAccessibleInfo . poolDegrees , 0 , newPoolDegrees , 0 , readerAccessibleInfo . poolDegrees . length ) ; readerAccessibleInfo = new ReaderAccessibleInfo ( newEdgePools , newPoolDegrees , readerAccessibleInfo . nodeDegrees ) ; for ( int i = numPools ; i < newNumPools ; i ++ ) { initPool ( i ) ; } numPools = newNumPools ; currentNumEdgesStored = currentNumEdgesStored ; }
target:  Synchronization comment: this method works fine without needing synchronization between the writer and the readers due to the wrapping of the arrays in ReaderAccessibleInfo. See the publication safety comment in ReaderAccessibleInfo for details.