文档声明同步静态方法锁定了类,但我不知道这意味着什么。你能解释一下吗?
public static synchronized Object getObjectById (Class objclass, Long id) {
答案 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()
这两个不能同时运行。
但是它们可以与非静态同步方法同时执行。原因是非静态同步方法锁定正在运行的实际实例。
祝你好运。