關(guān)于 synchronized
在 Java 中 synchronized 可用來給對象和方法或者代碼塊加鎖注祖,當(dāng)它鎖定一個方法或者一個代碼塊的時候冠王,同一時刻最多只有一個線程執(zhí)行這段代碼吓肋。
而 synchronized 底層是通過使用對象的監(jiān)視器鎖(monitor)來確保同一時刻只有一個線程執(zhí)行被修飾的方法或者代碼塊优烧∑锿瑁可以用鎖和鑰匙來解釋,被 synchronized 修飾的方法或者代碼塊是一把鎖铃拇,這把鎖是歸對象所有的,當(dāng)一個線程需要執(zhí)行這些方法或者代碼塊的時候沈撞,鎖就被鑰匙插上了慷荔,所以其他線程就不能執(zhí)行這些方法或者代碼塊。(實際情況還要更加復(fù)雜缠俺,這里只是便于理解显晶,實際上 synchronized 的鎖是可重入的)
Vector 同步
它的實現(xiàn)與 ArrayList 類似,但是使用了 synchronized 進(jìn)行同步壹士。
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
public synchronized E get(int index) {
if (index>= elementCount)
throw new ArrayIndexOutOfBoundsException(index);
return elementData(index);
}
與 ArrayList 的比較
- Vector 是同步的磷雇,因此開銷就比 ArrayList 要大,訪問速度更慢躏救。最好使用 ArrayList 而不是 Vector唯笙,因為同步操作完全可以由程序員自己來控制;
- Vector 每次擴(kuò)容請求其大小的 2 倍空間盒使,而 ArrayList 是 1.5 倍崩掘。
感謝
本文所有內(nèi)容均節(jié)選自下面兩篇文章,感謝分享少办。