Synchronize access to shared mutable data

The synchronized keyword ensures that only  a single thread will execute a statement or block at a time.

Many programmers think of synchronization solely as a means of mutual exclusion, to prevent an object from being observed in an inconsistent state

while it is being modified by another thread.

The view is correct, but it doesn't tell the whole story.

Not only dose synchronization prevent a thread from observing an ojbect in an inconsistent state, but it also ensures that

objects progress from consistent state to consistent state by an orderly sequence of state transitions that appear to execute sequentially.

Every thread entering a synchronized method or block sees the effects of all previous state transitions controlled by the same lock.

After a thread exits the synchronized region, any thread that enters a region synchronized by the same lock sees the state transition caused by that thread, if any.

You may hear it said that to improve performance, you should avoid the use of synchronization when reading or writing atomic data. This advice is dangerously wrong.

Sysnchronization is required for reliable communication between threads as well as for mutual exclusion.

In summary, whenever multiple threads share mutable data, each thread that reads or writes the data must obtain a lock.

發佈了22 篇原創文章 · 獲贊 22 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章