阅读量:0
在Java中,当一个静态方法被synchronized
关键字修饰时,它会锁定整个类,而不是对象实例。这是通过在类的Class
对象上使用同步块来实现的。
具体来说,每个Java类都有一个与之关联的Class
对象,这个对象在类加载时被创建。Class
对象存储了关于类的元数据,如方法、字段、类名等信息。当一个静态方法被同步时,JVM会在该类的Class
对象上添加一个监视器(monitor)。
当多个线程同时调用同一个类的静态方法时,JVM会使用这个监视器来确保只有一个线程可以进入方法内部。如果另一个线程试图在第一个线程正在执行方法时进入该方法,它会进入阻塞状态,直到第一个线程完成方法执行并释放监视器。
这种实现方式的好处是,它可以确保所有对静态资源的访问都是线程安全的,而不需要为每个对象实例创建额外的同步机制。
下面是一个简单的例子,展示了如何使用synchronized
关键字来同步静态方法:
public class Counter { private static int count = 0; public synchronized static void increment() { count++; } }
在这个例子中,increment
方法是静态的,并被synchronized
修饰。这意味着当多个线程同时调用这个方法时,只有一个线程可以执行方法体,确保了count
变量是线程安全的。