可見性就是當一個線程修改了共享變量的值,其他線程能夠立即得知這個修改。java內存模型在變量修改後將新的變量值同步回主內存,在其他線程讀取該變量之前從主內存刷新變量值來實現可見性。
主要實現可見性的方式有三種:
- volatile,注意一點 volatile不能保證操作的原子性。
- synchronized,在對一個變量進行unlock操作之前,必須把變量值同步回主內存。
- final,被final關鍵字修飾的變量在構造器中一旦初始化完成,並且沒有發生 this 逃逸(其他線程通過this引用訪問到初始化了一半的對象),那麼其他線程就能看見final字段的值。