什么是类级别的锁。你能举个例子解释一下吗?
最佳答案
我假设您是指同步锁。如果您不熟悉同步,则可以防止两个不同线程同时运行同一代码。在Java中,同步是通过对象锁完成的:
Object lock = new Object();
public void doSomething(){
...
synchronized(lock){
//something dangerous
}
...
}
在此代码中,可以确保在给定的时间只有一个线程可以执行危险的操作,并且它将在同步块(synchronized block)中完成所有操作,然后另一个线程才可以开始运行相同的代码。我猜您所说的“类级别锁”是同步方法上的隐式锁:
public synchronized void somethingDangerous(){...}
同样,在任何给定时间,只有一个线程可以执行该方法,并且总是会在另一个线程开始执行代码之前完成。这等效于“this”上的同步块(synchronized block):
public void somethingDangerous(){
synchronized(this){
//something dangerous
}
}
现在,此锁实际上不在类上,而是在单个实例上(即,不是所有时钟,而是只有您的时钟)。如果要使用真正的“类级别锁”(通常在静态方法中完成),则需要在与任何实例无关的对象上进行同步。例如:
public class Clock{
private static Object CLASS_LOCK = new Object();
public static void doSomething(){
...
synchronized(CLASS_LOCK){
//something dangerous to all clocks, not just yours
}
...
}
}
再次有一个静态方法的隐式锁:
public class Clock{
public static synchronized void somethingDangerous(){}
}
这等效于锁定类对象:
public class Clock{
public static void somethingDangerous(){
synchronized(Clock.class){
//do something dangerous
}
}
}