java 方法同步和读/写互斥

2022-09-01 20:17:17

我有两种方法,如下图所示。read()write()

class Store
{

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

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

1) 对象是单例。Store

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

我的要求是,当作者写信给商店时,所有读者都应该等待。即,当控件处于 时,应阻止所有调用。如何实现此目的?我已经尝试过这种方法,但对我来说似乎不起作用。write()read()synchronize(Store.class)write()


答案 1

在这种情况下,最好的选择是使用读写器锁:ReadWriteLock。它允许单个写入器,但允许多个并发读取器,因此它是此类方案最有效的机制。

一些示例代码:

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();
       }
    }
}

答案 2

synchronized是最简单的解决方案,所以你应该解释你所说的“似乎不适合我”是什么意思,也许可以告诉我们你是如何使用它的。

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


推荐