我有一个函数a(),b(),c()。我想同步a()执行与b()和c()执行,但不同步b()和c()(可能只有a()执行; b()和c()并行执行,但是不能有()和b()并行执行或()和c()并行执行) 可以用Java解决这个问题吗?
答案 0 :(得分:3)
你可以这样做:
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()
}
当然,这假设所有三个方法都在同一个类中,每个类都有一个这种锁的实例等。如果不是这种情况,请根据您的确切用途调整可见性/声明/等情况下。