正如我所说,
有什么区别
public static synchronized ..
和
public static
?
任何一个例子?
答案 0 :(得分:3)
synchronized关键字确保一次只能由一个线程调用方法。如果你没有放置同步,它本质上不是线程安全的。
答案 1 :(得分:1)
静态
静态意味着每个类一个,而不是每个对象一个,无论如何 可能存在许多类的实例。 这意味着您可以使用它们 没有创建一个实例 class.Static方法是隐含的 最后,因为压倒完成了 基于对象的类型,和 静态方法附加到 类,不是对象。静态方法 在超类中可以被遮蔽 子类中的另一个静态方法, 只要原来的方法是 没有宣布最终。但是,你 不能用a覆盖静态方法 非静态方法。换句话说,你 无法将静态方法更改为 子类中的实例方法。
答案 2 :(得分:1)
你需要注意的一点(一些程序员通常属于那个陷阱)是同步静态方法和非同步静态方法之间没有联系,即:
class A {
public static synchronized f() {...} //class level lock
public static g() {...} //object level lock
}
public class TestA{
public static void main(String[] args){
A a = new A();
//Thread 1:
a.f();
//Thread 2:
a.g();
}
}
f()和g()彼此不同步,因此可以完全同时执行。