转载本文章请标明作者《爱喝纯净水的南荣牧歌》
开始行动,你已经成功一半了,献给正在奋斗的我们
/**
* 使用读写锁实现的线程安全的List
*
* @author yanghang
*/
public class ReentrantLockList<T> {
// 默认的大小
private static final int DEFAULT_CAPACITY = 10;
// 线程不安全的List
private final List<T> array;
public ReentrantLockList() {
array = new ArrayList<>(DEFAULT_CAPACITY);
}
public ReentrantLockList(int initialCapacity) {
if (initialCapacity > 0) {
array = new ArrayList<>(initialCapacity);
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
// 读写锁
private final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
private final Lock readLock = readWriteLock.readLock();
private final Lock writeLock = readWriteLock.writeLock();
// 添加元素
public void add(T t) {
writeLock.lock();
try {
array.add(t);
} finally {
writeLock.unlock();
}
}
// 删除元素
public void remove(T t) {
writeLock.lock();
try {
array.remove(t);
} finally {
writeLock.unlock();
}
}
// 获取数据
public T get(int index) {
readLock.lock();
try {
return array.get(index);
} finally {
readLock.unlock();
}
}
public int getSize() {
readLock.lock();
try {
return array.size();
} finally {
readLock.unlock();
}
}
static ReentrantLockList<String> reentrantLockList = new ReentrantLockList<>(20000);
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
reentrantLockList.add(String.valueOf(i));
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
reentrantLockList.add(Thread.currentThread().getName());
}
});
Thread t3 = new Thread(() -> {
for (int i = 0; i < 100; i++) {
System.out.println(reentrantLockList.get(i));
}
});
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.println(reentrantLockList.getSize());
}
}