Java publicstaticsynchronized和publicstatic之间有什么区别?
正如我所说, 两者的区别是什么 公共静态同步。。和 公共静态?Java publicstaticsynchronized和publicstatic之间有什么区别?,java,Java,正如我所说, 两者的区别是什么 公共静态同步。。和 公共静态? 任何示例?synchronized关键字确保一个方法一次只能由一个线程调用。如果不放置synchronized,它本质上不是线程安全的。synchronized关键字确保一个方法一次只能由一个线程调用。如果不将其放入synchronized,它本质上就不是线程安全的 静态同步-在方法上 获取类的锁 静止的 静态意味着每个类一个,而不是每个对象一个,不管如何 一个类的许多实例可能存在。 这意味着您可以使用它们 而不创建 静态方法是隐式
任何示例?synchronized关键字确保一个方法一次只能由一个线程调用。如果不放置synchronized,它本质上不是线程安全的。synchronized关键字确保一个方法一次只能由一个线程调用。如果不将其放入synchronized,它本质上就不是线程安全的 静态同步-在方法上 获取类的锁 静止的 静态意味着每个类一个,而不是每个对象一个,不管如何 一个类的许多实例可能存在。 这意味着您可以使用它们 而不创建 静态方法是隐式的 最终,因为覆盖已完成 基于对象的类型,以及 静态方法附加到 类,而不是对象。静态方法 在超类中,可以使用 子类中的另一个静态方法, 只要原来的方法是正确的 未宣布为最终决定。然而,你 无法用 非静态方法。换句话说,你 无法将静态方法更改为 子类中的实例方法 静态同步-在方法上 获取类的锁 静止的 静态意味着每个类一个,而不是每个对象一个,不管如何 一个类的许多实例可能存在。 这意味着您可以使用它们 而不创建 静态方法是隐式的 最终,因为覆盖已完成 基于对象的类型,以及 静态方法附加到 类,而不是对象。静态方法 在超类中,可以使用 子类中的另一个静态方法, 只要原来的方法是正确的 未宣布为最终决定。然而,你 无法用 非静态方法。换句话说,你 无法将静态方法更改为 子类中的实例方法
您必须注意的一点是,一些程序员通常会陷入这种陷阱,即同步静态方法和非同步静态方法之间没有联系,即:
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彼此不同步,因此可以完全并发执行。对于一些程序员,您必须注意的一点是,通常会陷入这样的陷阱:同步静态方法和非同步静态方法之间没有联系,即:
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彼此不同步,因此可以完全并发执行。一个同步,另一个不同步。一个同步,另一个不同步。同步与线程安全有关,但不能保证线程安全,缺少同步也不意味着方法不是线程安全的。我知道。但在这个阶段,这么多信息就足够了:同步与线程安全相关,但不能保证线程安全,缺少同步也不意味着方法不是线程安全的。我知道。但在这个阶段,这么多信息就足够了:当你说锁定一个类是什么意思?当你说锁定一个类是什么意思?哪种方法的性能更快?我也不明白,这个方法的实际用途是什么,比如说,如果两者都有相同的代码,比如对一个对象做一些事情,并且它们在一些随机类中被调用了几次。当你把任何锁类级别或对象级别放在一起时,性能就会下降。这就是为什么我们选择线程安全的不可变类。哪个方法的性能更快?我也不明白,这个方法的实际用途是什么,比如说,如果两者都有相同的代码,比如对一个对象做一些事情,并且它们在一些随机类中被调用了几次。当你把任何锁类级别或对象级别放在一起时,性能就会下降。这就是为什么我们选择线程安全的不可变类。