首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java方法同步和读/写互斥

java方法同步和读/写互斥
EN

Stack Overflow用户
提问于 2012-04-29 21:57:51
回答 3查看 21.6K关注 0票数 24

我在一个类中有两个方法read()write(),如下所示。

代码语言:javascript
复制
class Store
{

  public void write()
  {
    // write to store;
  }

  public string  read()
  {
    // read from store;
  }
}

1) Store对象是单例对象。

2)我有一个将写入存储的Writer类和几个将同时从存储读取的Reader类。

我的要求是,当写入者写到商店时,所有的读者都应该等待。也就是说,当控制在write()中时,所有对read()的调用都应该被阻塞。我该如何实现这一点?我已经在write()方法中尝试过synchronize(Store.class),但似乎不适合我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-29 21:59:55

在这种情况下,最佳选择是使用读取器-写入器锁:ReadWriteLock。它允许单个写入器,但允许多个并发读取器,因此对于这种类型的场景,它是最有效的机制。

一些示例代码:

代码语言:javascript
复制
class Store
{
    private ReadWriteLock rwlock = new ReentrantReadWriteLock();

    public void write()
    {
       rwlock.writeLock().lock();
       try {
          write to store;
       } finally {
          rwlock.writeLock().unlock();
       }
    }

    public String read()
    {
       rwlock.readLock().lock();
       try {
          read from store;
       } finally {
          rwlock.readLock().unlock();
       }
    }
}
票数 40
EN

Stack Overflow用户

发布于 2012-04-29 22:01:44

synchronized是最简单的解决方案,所以你应该解释一下你所说的“对我来说似乎不像工作”是什么意思,也许还应该告诉我们你是如何使用它的。

更好的解决方案是使用ReentrantReadWriteLock,因为它还允许对读取器进行并发访问。

票数 5
EN

Stack Overflow用户

发布于 2012-04-29 22:00:32

使用java.util.concurrent包中的ReadWriteLock

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

https://stackoverflow.com/questions/10372668

复制
相关文章

相似问题

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