我是Java新手。我想知道是否有可能在构造函数内部调用同步方法。有一个例子:
class a{
int a1;
public a(){
a1 = 1;
increment();
}
private synchronized void increment(){
a1++;
}
}
这是一个玩具示例。我可以在构造函数中将a1设置为2。我只是感到困惑,是否可以在构造函数中调用increment()
。
答案 0 :(得分:7)
您可以这样做,但是同步是没有意义的,因为同步方法将锁定当前正在创建的实例。但是,在还没有创建并返回的线程中,还有哪个线程可以访问它呢?没有人。
只要遵循良好的做法,例如不要将this
传递给构造函数体内的其他类/对象,构造函数确实是事实上的线程安全对象。
使用synchronized static
方法或synchronized
字段上的static
可以使示例更有意义。