为什么我们不能在Java中将整个类声明为同步?

时间:2016-04-18 00:47:50

标签: java multithreading synchronize

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

2 个答案:

答案 0 :(得分:5)

标记整个班级synchronized会产生误导。虽然有些情况下制作类synchronized的所有方法非常有意义,但是类通常包含其他不能为synchronized的声明。

例如,类构造函数不能标记为synchronized。对于类的字段也是如此。可能会错误地假设标记为synchronized的类中的字段将以同步方式访问,但这不是Java自动执行的操作。当然,语言设计者可以声明类级别上的synchronized仅适用于方法,但这种决定在某种程度上是任意的。

答案 1 :(得分:0)

synchronized关键字只能用于方法声明和synchronized块。在方法声明中使用时,它与在方法内容周围添加synchronized块相同,在this上同步。没有什么可以阻止您同步类的每个方法。如果在每个方法声明上使用synchronized关键字,这意味着只能同时执行该类的一个方法。在多线程应用程序中,这可能会导致性能不佳,但没有任何东西可以阻止您这样做。