为什么我们不能在 Java 中将整个 class 声明为同步?
Why we can't declare whole class as synchronized in Java?
我是Java的新手,我只是想知道如果Java中的整个class同步,可能会出现什么问题?我知道 class 级别锁定的概念,这是不同的。
标记整个 class synchronized
会产生误导。尽管在某些情况下,使 class synchronized
的所有方法完全合理,但 class 通常包含其他不能 synchronized
.
的声明
例如,class 构造函数不能标记为 synchronized
。 class 的字段也是如此。人们可能会错误地假设 class 中标记为 synchronized
的字段将以同步方式访问,但这并不是 Java 自动执行的操作。当然,语言设计者可以声明 class 级别的 synchronized
仅适用于方法,但这样的决定有些武断。
synchronized
关键字只能用于方法声明和 synchronized
块。当用在方法声明上时,它与在方法内容周围添加一个 synchronized
块相同,在 this
上同步。没有什么可以阻止您同步 class 的每个方法。如果在每个方法声明中都使用 synchronized
关键字,这意味着 class 中只有一个方法可以同时执行。在多线程应用程序中,这可能会导致性能下降,但没有什么可以阻止您这样做。
我是Java的新手,我只是想知道如果Java中的整个class同步,可能会出现什么问题?我知道 class 级别锁定的概念,这是不同的。
标记整个 class synchronized
会产生误导。尽管在某些情况下,使 class synchronized
的所有方法完全合理,但 class 通常包含其他不能 synchronized
.
例如,class 构造函数不能标记为 synchronized
。 class 的字段也是如此。人们可能会错误地假设 class 中标记为 synchronized
的字段将以同步方式访问,但这并不是 Java 自动执行的操作。当然,语言设计者可以声明 class 级别的 synchronized
仅适用于方法,但这样的决定有些武断。
synchronized
关键字只能用于方法声明和 synchronized
块。当用在方法声明上时,它与在方法内容周围添加一个 synchronized
块相同,在 this
上同步。没有什么可以阻止您同步 class 的每个方法。如果在每个方法声明中都使用 synchronized
关键字,这意味着 class 中只有一个方法可以同时执行。在多线程应用程序中,这可能会导致性能下降,但没有什么可以阻止您这样做。