Jan29

【学习笔记】java读写锁学习小记

Author: leeon  Click: 4702   Date: 2014.01.29 @ 19:10:15 pm Category: java

直接贴上学习的测试代码:


import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

class func {
private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
private Lock wl = rwl.writeLock();
private Lock rl = rwl.readLock();

public void ww() throws InterruptedException {
wl.lock();
Thread.sleep(2000);
System.out.println("write here");
wl.unlock();
}

public void rr() throws InterruptedException {
rl.lock();
Thread.sleep(3000);
System.out.println("read here");
rl.unlock();
}
}

public class test {

public static void main(String[] args) {

final func f = new func();

Thread thread1 = new Thread(new Runnable() {

@Override
public void run() {

try {
f.rr();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread thread2 = new Thread(new Runnable() {

@Override
public void run() {
try {
f.rr();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});

Thread thread3 = new Thread(new Runnable() {

@Override
public void run() {
try {
f.ww();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});

thread1.start();
thread2.start();
thread3.start();
}

}


从运行的代码结果可以看出,线程在执行读锁的时候互相不会阻塞,但是读锁和写锁之间会相互被阻塞,同时读锁和读锁之间也是会相互阻塞的。

简单点说就是:A君在写文章,B君和C君只能等待,等A写完了B和C才能看,如果B和C都在看文章,A君就必须等待他们看完才能继续写文章。



TAG:   java 线程 读写锁

    评论
    • 提交

    分类

    标签

    归档

    最新评论

    Abyss在00:04:28评论了
    Linux中ramdisk,tmpfs,ramfs的介绍与性能测试
    shallwe99在10:21:17评论了
    【原创】如何在微信小程序开发中正确的使用vant ui组件
    默一在09:04:53评论了
    Berkeley DB 由浅入深【转自架构师杨建】
    Memory在14:09:22评论了
    【原创】最佳PHP框架选择(phalcon,yaf,laravel,thinkphp,yii)
    leo在17:57:04评论了
    shell中使用while循环ssh的注意事项

    我看过的书

    链接

    其他

    访问本站种子 本站平均热度:8823 c° 本站链接数:1 个 本站标签数:464 个 本站被评论次数:94 次