我研究线程同步。 当我有这个例子时:
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/