为什么我们可以';在Java中不能声明整个类是同步的吗?

为什么我们可以';在Java中不能声明整个类是同步的吗?,java,multithreading,synchronize,Java,Multithreading,Synchronize,我是Java新手,我只想知道,如果Java中的整个类都将被同步,那么可能出现的问题是什么?我知道类级锁定的概念,这是不同的 标记整个类同步会产生误导。尽管在某些情况下,使一个类的所有方法同步化是非常有意义的,但一个类通常包含其他不能同步化的声明 例如,类构造函数不能标记为已同步。类的字段也是如此。有人可能会错误地认为,标记为synchronized的类中的字段将以同步方式访问,但这不是Java自动执行的操作。当然,语言设计者可以声明类级别上的synchronized仅适用于方法,但这样的决定有点

我是Java新手,我只想知道,如果Java中的整个类都将被同步,那么可能出现的问题是什么?我知道类级锁定的概念,这是不同的

标记整个类
同步
会产生误导。尽管在某些情况下,使一个类的所有方法
同步化是非常有意义的,但一个类通常包含其他不能
同步化的声明


例如,类构造函数不能标记为
已同步
。类的字段也是如此。有人可能会错误地认为,标记为
synchronized
的类中的字段将以同步方式访问,但这不是Java自动执行的操作。当然,语言设计者可以声明类级别上的
synchronized
仅适用于方法,但这样的决定有点随意。synchronized
关键字只能用于方法声明和
synchronized
块。在方法声明中使用时,它与在方法内容周围添加
synchronized
块相同,在
this
上同步。没有什么可以阻止您同步类的每个方法。如果在每个方法声明中使用
synchronized
关键字,这意味着类中只有一个方法可以并发执行。在多线程应用程序中,这可能会导致性能不佳,但没有什么可以阻止您这样做。

另一个要考虑的是,在类级别上,<代码>同步的关键字应该如何影响从超类继承的方法或由子类重写或只添加的方法。这是否会使所有的
方法
也同步化
呢?假设Java允许将类声明为同步化,那么它对该类的对象创建有何影响?我只是在谈论主线程,当我们声明类为synchronized时,它的行为是如何受到影响的?@MayurGite问题是Java没有一个通用的好选择:对象创建是在实例上操作的东西,但与类整体相关。它可以表现得像一个
静态的
同步方法,但是它会锁定其他静态方法。通常,Java不允许标记构造函数
synchronized
。我认为类级别不允许
synchronized
,但创建线程安全的类肯定是可能的。