What Cases Require Synchronized Method Access in Java?

前端 未结 6 1156
醉酒成梦
醉酒成梦 2020-12-13 14:53

In what cases is it necessary to synchronize access to instance members? I understand that access to static members of a class always needs to be synchronized- because they

6条回答
  •  爱一瞬间的悲伤
    2020-12-13 15:26

    . Roughly, the answer is "it depends". Synchronizing your setter and getter here would only have the intended purpose of guaranteeing that multiple threads couldn't read variables between each others increment operations:

     synchronized increment()
     { 
           i++
     }
    
     synchronized get()
     {
       return i;
      }
    

    but that wouldn't really even work here, because to insure that your caller thread got the same value it incremented, you'd have to guarantee that you're atomically incrementing and then retrieving, which you're not doing here - i.e you'd have to do something like

      synchronized int {
        increment
        return get()
      }
    

    Basically, synchronization is usefull for defining which operations need to be guaranteed to run threadsafe (inotherwords, you can't create a situation where a separate thread undermines your operation and makes your class behave illogically, or undermines what you expect the state of the data to be). It's actually a bigger topic than can be addressed here.

    This book Java Concurrency in Practice is excellent, and certainly much more reliable than me.

提交回复
热议问题