我们可以在Java对象的构造函数中调用对象的同步方法吗?

时间:2019-06-12 18:28:17

标签: java class constructor synchronized

我是Java新手。我想知道是否有可能在构造函数内部调用同步方法。有一个例子:

class a{
    int a1;

    public a(){
        a1 = 1;
        increment();
    }

    private synchronized void increment(){
        a1++;
    }
}

这是一个玩具示例。我可以在构造函数中将a1设置为2。我只是感到困惑,是否可以在构造函数中调用increment()

1 个答案:

答案 0 :(得分:7)

您可以这样做,但是同步是没有意义的,因为同步方法将锁定当前正在创建的实例。但是,在还没有创建并返回的线程中,还有哪个线程可以访问它呢?没有人。
只要遵循良好的做法,例如不要将this传递给构造函数体内的其他类/对象,构造函数确实是事实上的线程安全对象。
使用synchronized static方法或synchronized字段上的static可以使示例更有意义。