如何将一个功能与其他功能同步但不同步其他功能?

时间:2014-11-18 12:12:20

标签: java multithreading concurrency synchronization

我有一个函数a(),b(),c()。我想同步a()执行与b()和c()执行,但不同步b()和c()(可能只有a()执行; b()和c()并行执行,但是不能有()和b()并行执行或()和c()并行执行) 可以用Java解决这个问题吗?

1 个答案:

答案 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()
}

当然,这假设所有三个方法都在同一个类中,每个类都有一个这种锁的实例等。如果不是这种情况,请根据您的确切用途调整可见性/声明/等情况下。