jdkconcurrent包当中的CopyOnWriteArrayList定义了一个数组和一个锁: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;这一句是不是必须的?为什么又定义了一个锁,并且实质用的还是全局定义的那个锁。如果直接用this.lock可不可以?如果不用getArray直接写成intlen=array.length;Object[]newElements=Arrays.copyOf(array,len+1);newElements[len]=o;array=newElements;是不是也可以?
慕田峪9158850
慕无忌1623718
相关分类