我们可以在 Java 中对象的构造函数中调用对象的同步方法吗?
Can we call synchronized method of an object inside the constructor of the object in Java?
我是 Java 的新手。我想知道是否可以在构造函数中调用同步方法。有例子:
class a{
int a1;
public a(){
a1 = 1;
increment();
}
private synchronized void increment(){
a1++;
}
}
这是一个玩具示例。我可以在构造函数中将 a1 设置为 2。我只是很困惑我们是否可以在构造函数中调用 increment()
。
你可以这样做,但同步是没有意义的,因为同步方法将锁定当前正在创建的实例。但是当它还没有被创建和返回时,还有哪个线程可以访问它呢?没有人。
只要您遵循良好的实践,例如不将 this
传递给构造函数体内的其他 classes/objects,构造函数确实是事实上的线程安全的。
您的示例在 static
字段上使用 synchronized static
方法或 synchronized
可能更有意义。
我是 Java 的新手。我想知道是否可以在构造函数中调用同步方法。有例子:
class a{
int a1;
public a(){
a1 = 1;
increment();
}
private synchronized void increment(){
a1++;
}
}
这是一个玩具示例。我可以在构造函数中将 a1 设置为 2。我只是很困惑我们是否可以在构造函数中调用 increment()
。
你可以这样做,但同步是没有意义的,因为同步方法将锁定当前正在创建的实例。但是当它还没有被创建和返回时,还有哪个线程可以访问它呢?没有人。
只要您遵循良好的实践,例如不将 this
传递给构造函数体内的其他 classes/objects,构造函数确实是事实上的线程安全的。
您的示例在 static
字段上使用 synchronized static
方法或 synchronized
可能更有意义。