检测并发访问Java对象

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

我对Java中的并发访问有疑问。

项目上下文如下:JSF 2.1; Richfaces 4,休眠3.6,春季3.2,Java 7。

我有一个显示数十万个文件夹的表(每个文件夹是一个Java对象,每个表行都是一个动态链接,用于访问对象(文件夹)的咨询或修改。

我的问题是:如何防止多个用户查看或编辑文件夹?

换句话说,如何同时检测到多个用户对文件夹(对象java)的访问?

我知道使用Synchronized on methods一词可以阻止并发访问,但是我想检测并发访问,以警告其他用户或其他用户文件夹(对象java)已经打开,我们必须等待因为它关闭了。

谢谢

java jsf-2
1个回答
0
投票

为每个表创建一个Lock

private Lock lock=new ReentrantLock();

开始使用表时,尝试获取锁或(如果失败)显示错误消息。

最后(如果您不再需要该表,则将其放弃。

boolean ok=lock.tryLock();
if(ok){
    try{
        // do whatever you want to do
    }finally{
        lock.unlock();
    }
}else{
    //error
}

如果无法最终尝试,请确保在不需要时解锁Lock

[ReentrantLock是特殊的Lock,如果您已获取同一线程,就可以获取它。

如果您不需要显示错误消息并且可以阻塞直到表可用,则可以只使用synchronized

为了做到这一点,您只需将synchronized添加到要保护的表类的每个方法中,或使用如下所示的同步块:

synchronized(table){
    //do whatever you want
}
© www.soinside.com 2019 - 2024. All rights reserved.