Java學習筆記(二)

**

JAVA8的ConcurrentHashMap

ConcurentHashMap數據結構類似hashmap但是其線程安全採用了Node鎖即對每一個鏈表頭結點加synchronized鎖,減低鎖的粒度,提高性能,並使用CAS(CompareAndSwap的縮寫比較替換,缺點:循環時間長開銷很大、只能保證一個共享變量的原子操作、ABA問題-先變爲b再變爲a。)操作來確保Node的一些操作的原子性,取代了鎖。可能用ReentrantLock鎖更好一點(手動加鎖解鎖更加靈活方便操作且易於實現公平鎖在解決死鎖上效果更好-限時等待、響應中斷)

**
**

LinkedHashMap,TreeMap

LinkedHashMap可以保證迭代器讀取時按照插入順序讀取,
TreeMap可以按照key大小排序(有個比較函數)
實現方式均通過一個內部鏈,TreeMap還用了插入排序
**
**

接口和抽象類的區別

1.接口內不能有構造函數抽象類可以
2.接口不能有靜態方法抽象類可以
3.接口不能包含普通成員變量(靜態可以)抽象類可以
4.接口可以多重實現繼承,抽象類只能被繼承一次
5.抽象類實現接口可以把接口中方法映射到抽象類中作爲抽象方法而不必實現
**
**

繼承、實現、依賴、關聯和聚合

繼承指的是一個類繼承另外的一個類的功能,並可以增加它自己的新功能的能力
實現class類實現interface接口(可以是多個)的功能
依賴指一個類的方法有個參數爲其他類
關聯指一個類的成員變量爲其他類
聚合一個類中有多個成員變量其他類組成了一個整體

**
**

BIO(同步阻塞)、僞異步阻塞、NIO(非阻塞IO)、AIO(異步IO)

BIO(同步阻塞)來一個請求創建一個線程
僞異步阻塞:當有新客戶端接入時,將客戶端的Socket封裝成一個Task,投遞到後端線程池中進行處理,線程池維護一個消息隊列和N個活躍線程,對消息隊列中的任務進行處理。由於線程池可以設置消息隊列的大小和最大線程數,因此,資源是可控的,無論多少個客戶端併發訪問,也不會導致資源耗盡和宕機。但是可用線程都被故障服務器阻塞時,後續所有的IO消息都將在隊列中排隊,線程池採用阻塞隊列實現,當隊列積滿後,後續入隊的操作將被阻塞,前端只有一個Accept線程接收客戶端接入,它被阻塞在線程池的同步阻塞隊列之後,新的客戶端請求將被拒絕,客戶端會發生大量連接超時。
非阻塞IO(同步IO):有一個線程不斷輪詢,IO多路複用可同時監聽多個描述符(socket),一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應的讀寫操作,IO多路複用避免阻塞在IO上,原本爲多線程來接收多個連接的消息變爲單線程保存多個socket的狀態後輪詢處理。這種機制也叫做反應器模式(Reactor),Reactor負責響應IO事件(accept,read,send),當有新的事件時發送給對應handler處理但是由於單線程一讀操作和寫操作需要快否則在用戶負載增加時,性能下降的非常快。
AIO:將線程需要處理的事情分成三類一類可以直接快速執行的、一類耗時的如IO操作還有就是需要在耗時IO操作後快速執行的,設計了回調函數模式

**

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