从 Synchronized block 调用 Java 方法

标签 java multithreading concurrency

在Java中

假设我有这样的代码

class A {
    method A(){
        synchronized(this) 
        {
            this.B();
        }
    }
    method B(){
        //do modification stuff here
    }
}

我的问题是,如果一个线程在方法 A 上工作,而另一个线程在方法 B 上工作,那么我的同步块(synchronized block)如何受到保护。??

最佳答案

如果我正确理解你的问题,你想同步访问这两种方法:

class A{
  synchronized void A() {
     B();
  }
  synchronized void B() {
  }
}

这样,A()B() 将使用相同的互斥体进行门控,并且如果一个线程尝试运行 B() 而另一个已经在运行 A(),则必须等待。

在您给出的示例中,如果 B() 是私有(private)方法,并且所有线程都通过其 A() 方法访问该对象,那么您就不会'不会有问题,因为运行 B() 的线程已经通过进入 A() 中的 synchronized{} block 来获取锁.

关于从 Synchronized block 调用 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28284253/

相关文章:

java - Spring:使用事务性数据库方法处理长时间运行的 Web 服务调用的最佳方式?

java - Mac 上的 MVN 权限被拒绝

java - 启动线程的问题

c++ - 在 Linux 上使用 C++ 将终端附加到创建的线程

Java 在多次成功执行线程后在循环中抛出 ExecutionException

java - 如何使用 Java 中的 xslt 从纯文本中读取所有数据?

java - JPQL 构造函数忽略具有 NULL 值的行

c++ - 为什么这段C++代码没有同步

java - 如何为并发类编写正确性测试?(2个 Action 不是并行执行的)

java - 更新 map 并阅读时锁定免费解决方案