繁体   English   中英

Java ReentrantReadWriteLock-正确用法?

[英]Java ReentrantReadWriteLock - Correct Usage?

我的Web应用程序存在一些并发性问题,其中完成了对DB的写操作,并且还可能同时进行读取。 写操作首先删除所有行,然后插入新行,因此有可能在数据库为空时完成读取,从而导致错误。 我正在使用ReentrantReadWriteLock,但要确保我正确使用了它。 任何修复将不胜感激。

private static final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();

public static Schedule lookupSchedule()
{
    lock.readLock().lock();
    try
    {
        // read data from the database, manipulate it, return it
    }
    finally
    {
       lock.readLock().unlock();
    }
}

public static void setSchedule()
{
    Connection conn = DB.getConnection();
    lock.writeLock.lock();
    try
    {
       conn.openTransaction();
       // delete all the rows from the table
       // insert all the new rows into the table
       conn.committTransaction();
    }
    catch (Exception ex)
    {
       conn.rollbackTransaction();
    }
    finally
    {
        lock.writeLock.unlock();
    }
}

就这个问题而言:您对ReentrantReadWriteLock的使用是正确的。

关于您的问题:我认为您需要考虑有效的事务隔离级别(并可能进行调整)。

希望这可以帮助...

另一个SO线程中的隔离级别说明: 不可重复读和幻像读之间有什么区别?

有关隔离级别的Java教程章节: http : //docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#transactions_data_integrity

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM