如何理解ReentrantLock的可重入和互斥
答案:1 悬赏:0 手机版
解决时间 2021-04-06 20:33
- 提问者网友:了了无期
- 2021-04-06 17:26
如何理解ReentrantLock的可重入和互斥
最佳答案
- 五星知识达人网友:笑迎怀羞
- 2021-04-06 18:10
lock.lock
aaa
bbb
ccc
lock.unlock
互斥是表示同一时刻,多个线程中,只能有一个线程能进入aaa bbb
ccc部分。但是多个线程都可以调用lock方法,只有一个会成功,其他的线程会被阻塞,直到unlock方法被调用
可重入的意思是某一个线程是否可多次获得一个锁,比如synchronized就是可重入的,ReentrantLock也是可重入的
代码如下
Java代码
class Parent {
protected Lock lock = new ReentrantLock();
public void test() {
lock.lock();
try {
System.out.println("Parent");
} finally {
lock.unlock();
}
}
}
class Sub extends Parent {
@Override
public void test() {
lock.lock();
try {
super.test();
System.out.println("Sub");
} finally {
lock.unlock();
}
}
}
public class AppTest {
public static void main(String[] args) {
Sub s = new Sub();
s.test();
}
}
aaa
bbb
ccc
lock.unlock
互斥是表示同一时刻,多个线程中,只能有一个线程能进入aaa bbb
ccc部分。但是多个线程都可以调用lock方法,只有一个会成功,其他的线程会被阻塞,直到unlock方法被调用
可重入的意思是某一个线程是否可多次获得一个锁,比如synchronized就是可重入的,ReentrantLock也是可重入的
代码如下
Java代码
class Parent {
protected Lock lock = new ReentrantLock();
public void test() {
lock.lock();
try {
System.out.println("Parent");
} finally {
lock.unlock();
}
}
}
class Sub extends Parent {
@Override
public void test() {
lock.lock();
try {
super.test();
System.out.println("Sub");
} finally {
lock.unlock();
}
}
}
public class AppTest {
public static void main(String[] args) {
Sub s = new Sub();
s.test();
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯