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彼此不同步,因此可以完全并发执行。

一个同步,另一个不同步。一个同步,另一个不同步。同步与线程安全有关,但不能保证线程安全,缺少同步也不意味着方法不是线程安全的。我知道。但在这个阶段,这么多信息就足够了:同步与线程安全相关,但不能保证线程安全,缺少同步也不意味着方法不是线程安全的。我知道。但在这个阶段,这么多信息就足够了:当你说锁定一个类是什么意思?当你说锁定一个类是什么意思?哪种方法的性能更快?我也不明白,这个方法的实际用途是什么,比如说,如果两者都有相同的代码,比如对一个对象做一些事情,并且它们在一些随机类中被调用了几次。当你把任何锁类级别或对象级别放在一起时,性能就会下降。这就是为什么我们选择线程安全的不可变类。哪个方法的性能更快?我也不明白,这个方法的实际用途是什么,比如说,如果两者都有相同的代码,比如对一个对象做一些事情,并且它们在一些随机类中被调用了几次。当你把任何锁类级别或对象级别放在一起时,性能就会下降。这就是为什么我们选择线程安全的不可变类。