简体   繁体   English

同步方法和锁

[英]Synchronized methods and locks

当线程调用同步方法时,它会自动获取该方法对象的内在锁,并在该方法返回时释放该内在锁,但是当调用静态同步方法时会发生什么,因为静态方法与类而非对象相关联?

A class is an Object too. 类也是对象。 When invoking synchronized static method, you acquire a lock on Class object. 调用同步静态方法时,您将获得对Class对象的锁定。

Every classes and interface in java has an associated object. Java中的每个类和接口都有一个关联的对象。

For a class name MyClass, you can get the class object by 对于类名MyClass,可以通过以下方法获取类对象

MyClass.class

From any object obj, you can get the class object by 从任何对象obj中,您都可以通过以下方式获取类对象

obj.getClass()

The lock is obtained for this object when a static method is synchronized. 当静态方法同步时,将为此对象获得锁定。

Just to make it clear- that still means, for example, one thread executes a synchronized nonstatic method, while the other does synchronized static method. 为了清楚起见,这仍然意味着,例如,一个线程执行同步的非静态方法,而另一个线程执行同步的静态方法。 You just cannot have two threads execute 2 synchronized static methods at the same time. 您只是不能让两个线程同时执行2个同步的静态方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM