java concurrent包常用類小結


concurrent包是常用多線程的相關包,最近由於開發sdn程序,對於多線程使用比以前多了很多,現簡單總結下。

第一類  原子類:用在多個線程共同操作一個計數的情況

AtomicLong

AtomicInteger

 

第二類 lock和condition

condition是從lock中得到的,所以在使用時,在執行了lock.lock()后才進行condition的操作,condition常用的兩個方法await和signal。

常用在多個線程操作一個共同的資源,一個線程執行結束后,另一個線程才能執行的情況。

另外,lock應該代替以前的synchronized關鍵字。synchronized屬於jvm層面的同步策略,由jvm進行鎖的分配和釋放。但是據說高並發量時,需要頻繁切換線程棧,性能不好。

從今以后,代碼中應該使用lock實現同步。

 

第三類  多線程任務執行ExecutorService

這部分大體上涉及到三個概念,

Callable     被執行的任務
Executor  執行任務()
Future      異步提交任務的返回數據 FutureTask為具體實現

線程資源是系統很珍貴的資源,的確不應該由程序員隨意的new Thread方式,自己啟動線程。如果項目上有自己的框架,應該使用項目框架中的線程工具,如果沒有最好使用jdk提供的ExecutorService工具類。

常見的線程池

  1. ExecutorService cachedThreadPool = Executors.newCachedThreadPool();   -- 超時會銷毀池中的線程
  2. ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);   -- 線程池中的線程即使空閑也不銷毀
  3. ExecutorService singleThreadPool = Executors.newSingleThreadExecutor();  
  4. ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3); -- 能夠定時執行任務的線程池,比如可以用在數據采集功能,每隔一小時執行一次

第四類  工具類 

比如 CyclicBarrier, CountDownLatch 用來協調多個線程,執行順序的

第五類  線程安全的集合類 比如BlockingQueue ConcurrentMap

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM