您好,登錄后才能下訂單哦!
復習
1. BlockingQueue
:阻塞式隊列,使用的時候需要指定容量,而且容量指定之后不可改變。
1. ArrayBlockingQueue
:基于數組進行存儲。
2. LinkedBlockingQueue
:基于鏈表進行存儲。在使用的時候可以指定容量也可以不指定。如果不指定,
則默認按照
Integer
最大值來計算。
3. PriorityBlockingQueue
:在使用的時候要求元素對應的類必須實現
Comparable
。在迭代的時候不保證
元素的排序,只有在一個個的取得時候才能保證。
4. SynchronousQueue
:同步隊列。只能存儲一個元素。
2. ConcurrentMap
:并發映射
1. ConcurrentHashMap
:底層在存儲數據的時候是依靠分段鎖機制,在
JDK1.8
中,采取了
CAS
無鎖算法來
取代了分段鎖。底層依然是依靠的數組來作為基本結構,但是從
JDK1.8
開始,不再采取數組
+
鏈表結構而
是采取數組
+
紅黑樹機制。
1.
紅黑樹本身是自平衡二叉查找樹。
2.
紅黑樹的特點
1.
每一個節點非黑即紅
2.
根節點一定是黑色
3.
紅節點的子節點一定是黑色
4.
最底層的葉子節點一定是黑色的
nil
節點
5.
任意一條路徑包含的黑節點的個數是一致的
6.
插入的節點一定是紅色
3.
紅黑樹的平衡性修正
1.
如果父節點以及叔父節點都是紅色,則將父節點以及叔父節點涂黑,將祖父節點涂紅
2.
如果叔父節點是黑色,并且當前節點是右子葉,則以當前節點為基準進行左旋
3.
如果叔父節點是黑色,并且當前節點是左子葉,則以父節點為基準進行右旋
2. ConcurrentNavigableMap
:并發導航映射。實現類之一是采取的跳躍表機制。跳躍表的特點是以空間
換時間。時間復雜度是
O(logn)
。
3.
線程池
1.
減少線程的創建和銷毀從而節省內存資源
2.
線程池是由核心線程、工作隊列、臨時線程以及拒絕執行處理器組成
3. Callable
和
Runnalbe
區別:返回值、異常、啟動方式
4. Lock
1.
比
synchronized
要更加的靈活和精細
2.
默認是非公平策略,可以手動設置為公平
3. CountDownLatch
:線程遞減鎖
/
閉鎖。當所有的線程都執行到同一節點之后進行統一處理
4 . CyclicBarrier
:柵欄。所有的線程到達同一節點之后再分別往下繼續執行。
5. Exchanger
:交換機。用于交換兩個線程的信息
6. Semaphore
:信號量。每一個線程取得一個信號,當信號被用完之后,其他線程只能被阻塞,只有當線
程釋放信號的時候,被阻塞的線程才能取得信號繼續執行。
原子性操作
在對象的底層進行加鎖,保證對象在同一時刻只能被一個線程操作。
回顧:內存
java
將內存大致分為
5
塊:棧內存、堆內存、方法區、本地方法棧、
PC
計數器(寄存器)。
棧內存:計算。所有的方法以及代碼塊的執行都是在棧內存中。每一個線程獨享一個棧。
堆內存:存儲對象。
方法區:存儲類信息,常量(字面量、自定義常量)。
本地方法棧:計算。所有的本地方法(
native
)的執行都在本地方法棧。
PC
計數器:程序的計數和線程的調度。
NIO
BIO - Blocking IO -
同步式阻塞式
IO
BIO
的缺點
1.
如果有大量的請求訪問服務器,那么就要產生大量的線程去應對這些請求,導致服務器資源過于緊張
2.
在完成一次任務的過程中需要創建大量的輸入或者輸出流
3.
數據通過流傳輸,無法實現定點操作
4.
阻塞模式
NIO - New IO -
同步式非阻塞式
IO
:
Buffer
,
Channel
,
Selector --- Buffer
是容器,用于存儲數據;
Channel
用
于傳輸;
Selector
進行過濾。
Buffer -
緩沖區
用于進行數據的存儲,存儲的時候都是用的數組。操作的都是基本類型。
數據在操作的時候是根據操作位
position
的位置決定。
限制位
limit
是決定操作位所能達到的最大值
標記位
mark
用于進行位置的標記,在出現錯誤的時候可以回到標記位進行重新操作,可以不用重復操作前邊的數
據
容量位
capacity
用于固定容量
標記位
<=
操作位
<=
限制位
<=
容量位
翻轉緩沖區:將限制位挪到操作位上,將操作位歸零,清除標記位
重置緩沖區:將操作位挪到標記位
重繞緩沖區:將操作位歸零,清除標記位
清空緩沖區:并不是將緩沖區真正清空,只是將操作位歸零,將限制位挪到容量位,將標記位清除
Channel -
通道
傳輸數據,基于緩沖區進行傳輸。可以進行雙向傳輸。
默認是阻塞的,可以設置為非阻塞。但是往往需要進行手動阻塞
TCP : SocketChannel , ServerSocketChannel
UDP : DatagramChannel
File : FileChannel
Selector -
多路復用通道選擇器
可以選擇出有用的事件或者是連接,進行事件的處理。
客戶端的事件:可連接、可讀、可寫
服務器端的事件:可接受、可讀、可寫
tomcat5:
使用的是傳統的
BIO
tomcat6:
使用
NIO
AIO - Asynchronous IO -
異步式非阻塞式
IO - JDK1.8 -
在
NIO
的基礎上延伸出來的,所以稱之為
NIO.2
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。