java method synchronization and read/write mutual exclusion

后端 未结 5 1464
醉酒成梦
醉酒成梦 2021-02-01 05:28

I have two methods read() and write() as below in a class.

class Store
{

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

  publi         


        
5条回答
  •  离开以前
    2021-02-01 05:42

    When a method is synchronized on some object, a thread executing this method blocks all the other threads that try to enter another block/method that is synchronized on the same object.

    So, if you want the writer threads to forbid any reader thread to read, you must synchronize both the write and the read method. There is no reason to synchronize on the Store class. Synchronizing on the Store object is more natural:

    public synchronized void write() {
      write to store;
    }
    
    public synchronized String read() {
      read from store;
    }
    

    This, however, (maybe) has a drawback: it also forbids two reader threads to read at the same time. If you really need this to happen, you should use a ReadWriteLock. But this will lead to code that is less performant, and harder to understand and maintain. I would only use it if I have measured that this is needed.

提交回复
热议问题