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


