新的java - 同步静态方法锁定类

时间:2014-05-08 19:15:53

标签: java android

文档声明同步静态方法锁定了类,但我不知道这意味着什么。你能解释一下吗?

public static synchronized Object getObjectById (Class objclass, Long id) {

3 个答案:

答案 0 :(得分:1)

这意味着无论何时访问此方法,它都将被锁定,并且在销毁锁之前,其他任何线程都无法访问它。换句话说,方法内容永远不会被多个线程同时执行。

请注意,虽然同步本质上会降低应用程序的速度,因为线程可能需要等待一段时间才能继续执行

答案 1 :(得分:0)

基本上它意味着,如果你在类Foo中有静态同步方法,它们就不能同时运行。如果2个线程将同时尝试访问它们,则一个线程将获得锁定。其他线程将不得不等待。

非静态同步方法使用某个对象作为锁。静态同步方法使用class。

Foo a = new Foo(); Foo b = new Foo();

a.syncMethod()和b.syncMethod()可以同时运行,因为它们会锁定不同的对象。

Foo.staticSyncMethod()和Foo.anotherStaticSyncMethod()无法同时运行。

答案 2 :(得分:0)

假设您有两个静态方法,并且两者都定义为synchronized。两个不能并发执行,因为它们共享相同的锁(这是类本身)。

public static synchronized void Foo()

public static synchronized void Bar()

这两个不能同时运行。

但是它们可以与非静态同步方法同时执行。原因是非静态同步方法锁定正在运行的实际实例。

祝你好运。