当线程调用synchronized方法时,它会自动获取该方法对象的内部锁,并在方法返回时释放它,但是当调用静态同步方法时会发生什么,因为静态方法与class不是一个对象?
答案 0 :(得分:5)
一个类也是一个Object。在调用synchronized static方法时,您获取了Class对象的锁定。
答案 1 :(得分:3)
java中的每个类和接口都有一个关联的对象。
对于类名MyClass,您可以通过
获取类对象MyClass.class
从任何对象obj,您都可以通过
获取类对象obj.getClass()
当静态方法同步时,将获取此对象的锁定。
答案 2 :(得分:1)
只是为了清楚 - 这仍然意味着,例如,一个线程执行同步非静态方法,而另一个线程执行同步静态方法。你不能让两个线程同时执行2个同步的静态方法。