Java-同步

标签 java multithreading

我研究线程同步。 当我有这个例子时:

class A {
  public synchronized void methodA(){

  }

  public synchronized void methodB(){

  }
}

class B {
  private final Object objectA = new Object(); 
  private final Object objectB = new Object();

  public void methodA(){
    synchronized(objectA){

    }
  }

  public void methodB(){
    synchronized(objectB){

    }
  }
}

在第一种情况下,两个方法的所有调用都必须序列化,这是正确的吗?方法不能同时调用,当前只能调用一组“同步”方法中的一个方法。

第二种情况是在对象级别。当前只有一个线程可以调用一个方法。但是方法A和B可以同时调用吗?

最佳答案

您对第二部分的看法是正确的,但第一部分需要一些澄清。

class A {
  public synchronized void methodA(){

  }

  public synchronized void methodB(){

  }
}

此代码与下一个代码的作用相同

class A {
  public void methodA(){
       synchronized (this) {
       }
  }

  public void methodB(){
       synchronized (this) {
       }
  }
}

因此,在一个对象上只能同时调用一个方法。相同或其他方法的其他调用将等待。但在不同的对象上可以调用任何方法。

关于Java-同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49762174/

相关文章:

java - 用户名、密码等硬编码到程序中——如何从文件中获取它们?

java - JMeter中使用多线程测试时无法解决 "Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread"

java - 导致故障转储的 Java 错误的解决方法

java - REST API + Java 多线程

c++ - 为什么 "constructor invocation"不触发任何编译器 (g++) 警告?

java - JTextArea 中的 BufferedReader 输出

java Servlet 2个数字相加

java - 如何为我的 SWT WPF 程序设置主题?

java - 如何删除 POI 生成的 excel 中的警告?

c - pthread_mutex 和进程终止