jdkconcurrent包當中的CopyOnWriteArrayList定義了一個數(shù)組和一個鎖:privatevolatiletransientObject[]array;transientfinalReentrantLocklock=newReentrantLock();他的add方法如下:publicbooleanadd(Ee){finalReentrantLocklock=this.lock;lock.lock();try{Object[]elements=getArray();intlen=elements.length;Object[]newElements=Arrays.copyOf(elements,len+1);newElements[len]=e;setArray(newElements);returntrue;}finally{lock.unlock();}}問題:add方法中的finalReentrantLocklock=this.lock;這一句是不是必須的?為什么又定義了一個鎖,并且實質(zhì)用的還是全局定義的那個鎖。如果直接用this.lock可不可以?如果不用getArray直接寫成intlen=array.length;Object[]newElements=Arrays.copyOf(array,len+1);newElements[len]=o;array=newElements;是不是也可以?
關于CopyOnWriteArrayList源碼的疑惑
九州編程
2019-04-13 08:46:27