實踐篇:如何編寫線程安全的類

引言

今天是 2019 年最後一天,趁着中午喫飯的空擋,筆者寫了本文,算是給自己今年博客寫作畫上一個句號吧!

本章節來聊聊線程安全類的實現方式,日常開發中讀者可能都用過的,這裏作一個簡單的彙總。目前有幾種常用的線程安全類的實現方式,悉數如下:

  1. 設計不變的類,如枚舉類;
  2. 利用同步鎖來保證線程操作的安全性,參考示例如何實現線程安全的單例類;
  3. 使用 ThreadLocal ,每個線程維護自己的複本數據,避免共享數據;

如何設計不變類

併發環境中,一個類如果是不變的,那麼它一定就是線程安全的。這是設計模式中不變模式的一種:一個對象在創建之後,它的狀態就不會再發生變化,它就是不變類。

Java 中的 String,各種基本類型的封裝類型,都是不變類。在設計任何一個類的時候,應當慎重考慮其狀態是否需要變化,如果其狀態沒有變化的必要,那麼就應當將它設計成不變類。

設計不變的類,應該限制成員變量的操作,只提供 get 方法,且所有引用屬性的訪問都使用拷貝,避免直接與外界發生聯繫。一個簡單的不變類編寫如下:

import java.util.Date;

/**
 * 不可變對象定義,不提供set方法,避免外界對該對象屬性進行修改
 * 對象中用到
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章