Java- 併發編程 注意事項

一、ConcurrentHashMap 使用注意事項

put 方法判斷如果 key 已經存在,則使用 value 覆蓋原來的值並返回原來的值,如果不存在則把 value 放入並返回 null。而 putIfAbsent 方法則是如果 key 已經存在則直接返回原來對應的值並不使用 value 覆蓋,如果 key 不存在則放入 value 並返回 null,另外要注意,判斷 key 是否存在和放入是原子性操作。

 

二、ThreadPoolExecutor 線程池

線程池主要解決兩個問題:

1、當執行大量異步任務時,線程池能夠提供較好的性能。線程池裏面的線程是可複用的,不需要每次執行異步任務時都重新創建和銷燬線程。

2、線程池提供了一種資源限制和管理的手段,比如可以限制線程的個數,動態新增線程等。

 

三、ThreadLocal

ThreadLocal 是 JDK 包提供的,它提供了線程本地變量,也就是你創建了一個 ThreadLocal  變量,那麼訪問這個變量的每個線程都會有這個變量的一個本地副本。當多個線程操作這個變量時,實際操作的是自己本地內存裏面的變量,從而避免了線程安全問題。創建一個 ThreadLocal 變量後,每個線程都會複製一個變量到自己的本地內存。

ThreadLocal  使用完畢後及時調用 remove 方法解決內存泄漏問題。

 

四、SimpleDateFormat

SimpleDateFormat 是線程不安全的,因爲 Calender 是線程不安全的。

使用 ThreadLocal  解決 SimpleDateFormat  線程不安全的問題,打打節省對象的創建銷燬開銷,並且不需要使多個線程同步。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章