0

你好我有一些关于Lock's implementation: ReentrantLock. 我正在使用singleton cache内部Spring 3.0(web)。但是,当我同时打开几个浏览器选项卡时,所有线程似乎都被锁定,并且我收到了几个不必要的 Web 服务调用。为什么是这样?不是lock.tryLock()线程安全的吗?我尝试使用 an atomic boolean,但问题仍然存在。我还检查了引用的同一个 Cache 实例。

import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class SomeCache {

    private List<Object> stuff;
    private Lock lock;

    public SomeCache() { 
        lock = new ReentrantLock();
    }

    public List<Object> getStuff() { 
        if(lock.tryLock()) {
            try{ 
                //call webService
            }
            finally { 
                 lock.unlock(); 
            } 
        }
        else {
           //get other data
        }
        return stuff;
    }

}

提前谢谢,干杯。

4

0 回答 0