据我所知,默认情况下控制器是单例范围。如果控制器中有静态变量,我该如何使其线程安全?
除了使用同步方式来处理它,还有其他方法吗?
您可以使用ReadWriteLock
对某些共享对象执行线程安全的读/写操作:
import java.util.concurrent.locks.*;
public class Something {
private static SomeObject object = new SomeObject();
private static ReadWriteLock objectLock = new ReentrantReadWriteLock();
public void doSomething() {
objectLock.readLock().lock();
try {
//reading something from object
} finally {
objectLock.readLock().unlock();
}
objectLock.writeLock().lock();
try {
//writing something in object
} finally {
objectLock.writeLock().unlock();
}
}
}
请注意,在此示例中,如果object
变量的值发生变化(而不是对象本身),则应使用volatile
修饰符声明它。