Java 如何将一个函数与其他函数同步,而不在它们之间同步其他函数?
我有函数a(),b(),c()。我想将a()执行与b()和c()执行同步,但不同步b()和c()(只能有a()执行;b()和c()并行执行,但不能有a()和b()并行执行或a()和c()并行执行)Java 如何将一个函数与其他函数同步,而不在它们之间同步其他函数?,java,multithreading,concurrency,synchronization,Java,Multithreading,Concurrency,Synchronization,我有函数a(),b(),c()。我想将a()执行与b()和c()执行同步,但不同步b()和c()(只能有a()执行;b()和c()并行执行,但不能有a()和b()并行执行或a()和c()并行执行) 这个问题可以用Java解决吗?您可以这样做: private final ReadWriteLock rwlock = new ReentrantReadWriteLock(); void a() { rwlock.writeLock().lock(); try { whatever
这个问题可以用Java解决吗?您可以这样做:
private final ReadWriteLock rwlock = new ReentrantReadWriteLock();
void a() {
rwlock.writeLock().lock();
try { whatever(); } finally { rwlock.writeLock().unlock(); }
}
void b() {
rwlock.readLock().lock();
try { whatever(); } finally { rwlock.readLock().unlock(); }
}
void c() {
// same as b()
}
当然,这假设所有三个方法都在同一个类中,每个类都有一个锁的实例等。如果不是这样,请根据具体用例的要求调整可见性/声明等。您可以这样做:
private final ReadWriteLock rwlock = new ReentrantReadWriteLock();
void a() {
rwlock.writeLock().lock();
try { whatever(); } finally { rwlock.writeLock().unlock(); }
}
void b() {
rwlock.readLock().lock();
try { whatever(); } finally { rwlock.readLock().unlock(); }
}
void c() {
// same as b()
}
当然,这假设所有三个方法都在同一个类中,每个类都有一个锁的实例等。如果不是这样,请根据具体用例的要求调整可见性/声明等。您可以这样做:
private final ReadWriteLock rwlock = new ReentrantReadWriteLock();
void a() {
rwlock.writeLock().lock();
try { whatever(); } finally { rwlock.writeLock().unlock(); }
}
void b() {
rwlock.readLock().lock();
try { whatever(); } finally { rwlock.readLock().unlock(); }
}
void c() {
// same as b()
}
当然,这假设所有三个方法都在同一个类中,每个类都有一个锁的实例等。如果不是这样,请根据具体用例的要求调整可见性/声明等。您可以这样做:
private final ReadWriteLock rwlock = new ReentrantReadWriteLock();
void a() {
rwlock.writeLock().lock();
try { whatever(); } finally { rwlock.writeLock().unlock(); }
}
void b() {
rwlock.readLock().lock();
try { whatever(); } finally { rwlock.readLock().unlock(); }
}
void c() {
// same as b()
}
当然,这假设所有三个方法都在同一个类中,每个类都有一个锁的实例等。如果不是这样,请根据您的具体用例调整可见性/声明/etc。您正在寻找
读写锁
,我会说。@MarkoTopolnik为什么不使用简单的锁?@fge您如何使用简单的锁来实现不对称?@MarkoTopolnik您能解释一下我应该如何使用它吗?您在b()
和c()
中锁定读取,在a()
中锁定写入。您正在寻找ReadWriteLock
,我会说。@MarkoTopolnik为什么不使用简单的锁?@fge您如何使用简单的锁来实现不对称?@MarkoTopolnik您能解释一下我应该如何使用它吗?您在b()
和c()
中锁定读取,在a()
中锁定写入。您正在寻找ReadWriteLock
,我会说。@MarkoTopolnik为什么不使用简单的锁?@fge您如何使用简单的锁来实现不对称?@MarkoTopolnik您能解释一下我应该如何使用它吗?您在b()
和c()
中锁定读取,在a()
中锁定写入。您正在寻找ReadWriteLock
,我会说。@MarkoTopolnik为什么不使用简单的锁?@fge您如何使用简单的锁来实现不对称?@MarkoTopolnik您能解释一下我应该如何使用它吗?您可以在b()
和c()
中锁定读取,在a()
中锁定写入。谢谢!这正是我所需要的!非常感谢。这正是我所需要的!非常感谢。这正是我所需要的!非常感谢。这正是我所需要的!