首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ReentrantReadWriteLock -正确的用法?

Java ReentrantReadWriteLock -正确的用法?
EN

Stack Overflow用户
提问于 2014-05-21 14:26:34
回答 1查看 1.9K关注 0票数 2

我的web应用程序存在一些并发问题,其中有一个对数据库的写入,并且可能同时进行读取。写入首先删除所有行,然后插入新行,因此有可能在数据库为空时完成读取,从而导致错误。我正在使用ReentrantReadWriteLock,但希望确保正确使用它。如有任何解决办法,将不胜感激。

代码语言:javascript
复制
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();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-21 15:12:34

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

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

希望这能帮上忙。

隔离级别在另一个SO线程中的解释:what is difference between non-repeatable read and phantom read?

关于隔离级别的Java教程一章:integrity

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23786130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档