静态类和普通类之间的区别

时间:2011-10-18 19:06:06

标签: java

我是Java新手,正在阅读同步块的东西。我在其中一个语句中感到困惑,在静态类中,同步使用类实例,而普通类使用当前对象进行锁定。

现在当两个类都相同时,唯一的区别是一个类是静态的而另一个是正常的。这是否会对解释进行任何更改。

然后我的下一个问题将是我们可以通过多少方式实现同​​步。

谢谢

5 个答案:

答案 0 :(得分:3)

这不是关于 - 它是关于方法

synchronized方法在实例上同步; static个没有实例,因此在相应的Class实例上执行同步。

答案 1 :(得分:2)

您混淆了Class,static,instance以及synchronized块如何工作的概念。

一个类就像一个蓝图,该类的实例就像是蓝图中的房屋构建。您可以拥有许多根据相同蓝图构建的房屋,就像您可以拥有许多类的实例一样。一个类可以有实例方法(非静态,正常,如果你愿意)和静态方法。就像一个房子(蓝图的实现)可以有一个灯光开关功能(方法),它只在实际房屋存在时才会出现,就像非静态(实例)方法只有在你做一个实例时才可用。一类。另一方面,想象房屋蓝图有一个按钮,按下后会计算房屋的面积。这是一个可以直接在蓝图上工作的函数,但也可以在房子上使用,就像静态方法可以与(非实例化)类一起使用,但在类的实例中使用也是有意义的。

使用时的同步方法在使用它们的东西上获取锁定。如果你有一个静态方法(在非实例化的类中或从类的实例中),它将获取类的锁,因为静态方法与类(而不是实例)相关。如果你调用一个动态方法(你只能从类的一个实例做),它将获取实例上的锁,而不是类。

答案 2 :(得分:1)

实际上是静态方法与非静态方法。

可以在没有对象的情况下调用静态方法(即:no this),因此它们使用类'对象的锁。

非静态方法使用对象的(this)锁定。

答案 3 :(得分:0)

当静态方法同步时,锁定在“类”实例本身上完成。这意味着,如果执行了静态同步方法,则不能执行任何其他静态同步方法。

答案 4 :(得分:0)

当声明方法同步时,这意味着一次只能对该方法执行一次调用。当一个类有多个synchronized时,会创建一个同步的API,这意味着一次只能对所有这些方法进行一次调用。

静态方法不是实例方法,它意味着你不是从对象实例中调用它,而是从它自己的类中调用它。

当在并发环境中时,当有各种对象从特定对象实例调用方法时,需要同步此方法,以确保一次只发生一个。