📅  最后修改于: 2023-12-03 14:42:57.140000             🧑  作者: Mango
Java提供了两种不同类型的锁:对象级和类级锁。这两种锁分别用于多线程访问对象和类的不同情况。
对象级锁也称为实例级锁,是一个特定对象实例的锁。当线程试图获取该对象的对象级锁时,它必须等待该对象的所有其他线程释放该锁。
Java中可以使用synchronized
关键字来获取和释放对象级锁。以下是一个例子:
public class Counter {
private int count;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
在synchronized
方法中使用this
关键字可以获取该对象的对象级锁。
类级锁是多个对象实例之间共享的锁。当线程试图获取类级锁时,它必须等待所有其他线程释放该锁。
Java中可以使用synchronized
关键字和类名称来获取和释放类级锁。以下是一个例子:
public class Counter {
private static int count;
public static synchronized void increment() {
count++;
}
public static synchronized int getCount() {
return count;
}
}
在静态方法中使用ClassName.class
可以获取该类的类级锁。
对象级锁和类级锁有以下区别:
在使用锁时,以下是一些建议:
总之,使用适当的锁可以确保多线程应用程序的正确性和效率。