如何使线程安全于Web控制器中的静态变量

时间:2019-04-14 19:54:49

标签: java spring servlets thread-safety

据我所知,默认情况下,控制器为单例作用域。如果控制器中有一个静态变量,如何使它成为线程安全的?

除了使用同步方式来处理它之外,还有其他方法吗?

1 个答案:

答案 0 :(得分:-1)

您可以使用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修饰符对其进行声明。