首页 新闻 会员 周边

java中synchronized和ReentrantLock的加锁和解锁能在不同线程吗?如果能,如何实现?

0
悬赏园豆:5 [待解决问题]

java中synchronized和ReentrantLock的加锁和解锁能在不同线程吗?如果能,如何实现?

福大大架构师每日一题的主页 福大大架构师每日一题 | 初学一级 | 园豆:2
提问于:2023-06-21 07:35
< >
分享
所有回答(1)
0

在Java中,synchronized和ReentrantLock都是可重入锁,所以在线程上的加锁和解锁会做限制,加锁和解锁必须在同一线程,并且成对出现。如果你想在不同的线程上加锁和解锁,你需要使用Condition。Condition是一个与Lock绑定的对象,它可以让你在不同的线程上等待和唤醒。例如:
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();

// 线程1
lock.lock();
try {
// do something
condition.signal();
} finally {
lock.unlock();
}

// 线程2
lock.lock();
try {
condition.await();
// do something
} finally {
lock.unlock();
}
这样,线程1就可以在不同的线程上解锁,而线程2则可以在不同的线程上等待和唤醒。

长别 | 园豆:427 (菜鸟二级) | 2023-07-07 11:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册