类的构造方法可以使用synchronized修饰吗?
下文笔者讲述类构造方法上是否可以加入"synchronized"关键字的简介说明,如下所示
类构造方法(构造函数)可使用`synchronized`修饰 但实际情况下,意义不大 ==================================================================== 1.构造方法本质上只能被一个线程调用 -一个对象的构造过程是由单个线程完成的, 其他线程不能同时构造同一个对象。 -所以在构造方法上加`synchronized` 并不会起到“防止并发构造”的作用。 2.无法阻止多个线程创建多个实例 -即使构造方法是`synchronized` 也不能阻止多个线程各自构造不同的实例。 -如下例中 每个线程都会创建一个新`MyClass`实例 互不干扰 new MyClass(); //多个线程调用这句代码会创建多个实例 3.影响性能且无实际意义 -在构造方法上加锁会导致不必要的同步开销。 -因为构造方法本身不存在多线程竞争资源的情况, 除非你在构造方法内部访问了外部共享资源(如静态变量) 这时应单独对那些资源进行同步控制
构造方法前加上`synchronized`关键字的示例
public class MyClass { public synchronized MyClass() { // 构造逻辑 } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。