java - 限制其他类方法的方法执行

标签 java multithreading java.util.concurrent

有人问我这个问题,我找不到解决方案,我有一个类 A,方法是 a1a2 :

A 类 {a1() a2()}:

和一个类 B,方法为 b1b2:

B 类 {b1() b2()}

考虑到多线程环境,我想在调用 a1 时停止执行 b1,同样适用于 b2 和 a2。这两个对象都是独立的。这可能吗?

最佳答案

public class A {
    private final Object lock;

    public A(Object lock) {
        this.lock = lock;
    }

    public void a1() { 
        synchronized(lock) {
            ...
        }
    }
}

public class B {
    private final Object lock;

    public B(Object lock) {
        this.lock = lock;
    }

    public void b1() { 
        synchronized(lock) {
            ...
        }
    }
}

现在如果你构造一个 A 和一个 B 并向它们传递相同的锁对象,这两个对象的 a1()b1() 方法将相互独家:

Object lock = new Object();
A a = new A(lock);
B b = new B(lock);

如果你想让a2()b2()互斥,那么再传一个锁对象,让这两个方法在这个锁对象上同步。

关于java - 限制其他类方法的方法执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22140619/

相关文章:

java - 将hibernate域对象插入到不同的数据库?

java - Android 不同颜色的圆形背景

ios - 快速删除后台线程上的核心数据而不更新 MOC

c# - 我应该将 await 与 async Action 方法一起使用吗?

java - 创建arraylist HashMap 的最佳方法

节点的 JavaFX 快照

c++ - C++内存顺序的理解,我错了吗?

java - 在 Java 中,如何定义返回多个答案中最佳答案的 Future<V>?

java - Executors.newFixedThreadPool - 问题

java - 在 run() 中中断当前线程不会抛出 InterruptedException