est = new ReadWriteLockTest();
new Thread(){
@Override
public void run() {
test.get(Thread.currentThread());
}
}.start();
new Thread(){
@Override
public void run() {
test.get(Thread.currentThread());
}
}.start();
}
public void get(Thread thread) {
try {
rw1.readLock().lock();
long start = System.currentTimeMillis();
while (System.currentTimeMillis() - start <= 1){
System.out.println(thread.getName() + "正在读操作");
}
System.out.println(thread.getName() + "读操作完成");
} catch (Exception e) {
e.printStackTrace();
} finally {
rw1.readLock().unlock();
}
}
}
运行结果如下:
可以看到线程间是不用排队来读操作的。这样效率明显很高。
我们再看一下写操作,如下:
public class ReadWriteLockTest {
private ReentrantReadWriteLock rw1 = new ReentrantReadWriteLock();
public static void main(String[] args) {
final ReadWriteLockTest test = new ReadWriteLockTest();
new Thread(){
@Override
public void run() {
test.get(Thread.currentThread());
}
}.start();
new Thread(){
@Override
public void run() {
test.get(Thread.currentThread());
}
}.start();
}
public void get(Thread thread) {
try {
rw1.writeLock().lock();
long start = System.currentTimeMillis();
while (System.currentTimeMillis() - start <= 1){
System.out.println(thread.getName() + "正在写操作");
}
System.out.println(thread.getName() + "写操作完成");
} catch (Exception e) {
e.printStackTrace();
} finally {
rw1.writeLock().unlock();
}
}
}
运行结果如下:
可以看到ReadWriteLock只允许一个写者。
公平锁
Re