一、读写锁
读写锁的特点:多个线程可以并发读
- 线程间读读不互斥
- 读写互斥
- 写写互斥
- 读:加读锁 readlock
- 写:加写锁 writelock
- 只有读:不加锁
- 只有写:加sychronized、ReentrantLock
- 既有读又有写:读写锁
在vector中加读、写锁:
import java.util.AbstractList;
import java.util.Arrays;
import java.util.List;
import java.util.RandomAccess;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class MyVector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
protected Object[] elementData;
protected int elementCount;
protected int capacityIncrement;
@Override
public E get(int index) {
lock.readLock().lock(); //加上了读锁
try {
if (index >= elementCount)
throw new ArrayIndexOutOfBoundsException(index);
//get 操作
return elementData(index);
} finally {
lock.readLock().unlock();
}
}
E elementData(int index) {
return (E) elementData[index];
}
public void add(int index, E element) {
insertElementAt(element, index);
}
public void insertElementAt(E obj, int in