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

问题描述 投票:0回答:1

据我所知,默认情况下控制器是单例范围。如果控制器中有静态变量,我该如何使其线程安全?

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

java spring servlets thread-safety
1个回答
-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修饰符声明它。

© www.soinside.com 2019 - 2024. All rights reserved.