Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将一个函数与其他函数同步,而不在它们之间同步其他函数?_Java_Multithreading_Concurrency_Synchronization - Fatal编程技术网

Java 如何将一个函数与其他函数同步,而不在它们之间同步其他函数?

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

我有函数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(); } 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()
中锁定写入。谢谢!这正是我所需要的!非常感谢。这正是我所需要的!非常感谢。这正是我所需要的!非常感谢。这正是我所需要的!