package Test;import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;public class MyArrayListA{
private Object[]data;
private int count;
private Lock rlock;
private Lock wlock; public MyArrayListA(){
data=new Object[10];
count=0;
ReentrantReadWriteLock lock=new ReentrantReadWriteLock();
rlock=lock.readLock();
wlock=lock.writeLock();
}
public synchronized void add(Object obj){
data[count]=obj;
for(int i=0;i<100000;i++)
;
count++;
}
public void remove(){
wlock.lock();
wlock.unlock();
}
public void add2(Object obj){
try{
wlock.lock();
data[count]=obj;
for(int i=0;i<100000;i++)
;
count++;
}finally{
wlock.unlock();
} }public synchronized String toString(){
StringBuffer sb=new StringBuffer("[");
for(int i=0;i<count;i++){
sb.append(data[i]+",");
}
sb.append("]");
return sb.toString();
}public Object get(int index){
rlock.lock();
rlock.unlock();
return index;
}
}
疑问:在程序中:private Lock rlock;private Lock wlock; 这两个定义是否多余了? 因为在后面的代码中: ReentrantReadWriteLock lock=new ReentrantReadWriteLock();
rLock=lock.readLock();
wLock=lock.writeLock();
又出现了对这两个读写锁rlock和wlock的定义,而且Eclipse一直在编译是提示错误, 为什么?如果我把他们改成小写的rlock和wlock,则不会提示错误;我一直怀疑这样定义是否重复了,麻烦大家指点,我刚初学,不是很懂。
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;public class MyArrayListA{
private Object[]data;
private int count;
private Lock rlock;
private Lock wlock; public MyArrayListA(){
data=new Object[10];
count=0;
ReentrantReadWriteLock lock=new ReentrantReadWriteLock();
rlock=lock.readLock();
wlock=lock.writeLock();
}
public synchronized void add(Object obj){
data[count]=obj;
for(int i=0;i<100000;i++)
;
count++;
}
public void remove(){
wlock.lock();
wlock.unlock();
}
public void add2(Object obj){
try{
wlock.lock();
data[count]=obj;
for(int i=0;i<100000;i++)
;
count++;
}finally{
wlock.unlock();
} }public synchronized String toString(){
StringBuffer sb=new StringBuffer("[");
for(int i=0;i<count;i++){
sb.append(data[i]+",");
}
sb.append("]");
return sb.toString();
}public Object get(int index){
rlock.lock();
rlock.unlock();
return index;
}
}
疑问:在程序中:private Lock rlock;private Lock wlock; 这两个定义是否多余了? 因为在后面的代码中: ReentrantReadWriteLock lock=new ReentrantReadWriteLock();
rLock=lock.readLock();
wLock=lock.writeLock();
又出现了对这两个读写锁rlock和wlock的定义,而且Eclipse一直在编译是提示错误, 为什么?如果我把他们改成小写的rlock和wlock,则不会提示错误;我一直怀疑这样定义是否重复了,麻烦大家指点,我刚初学,不是很懂。
r.lock(); try { return m.get(key); } finally { r.unlock(); }
即先上锁,然后进入try-finally语句进行解锁