中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

day2 Java NIO

發布時間:2020-08-11 22:04:12 來源:ITPUB博客 閱讀:122 作者:hgs19921112 欄目:編程語言

復習
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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锡林郭勒盟| 宁化县| 永清县| 武威市| 肃宁县| 安丘市| 久治县| 桦甸市| 宝应县| 综艺| 唐山市| 奇台县| 武宁县| 黎平县| 教育| 襄垣县| 盘锦市| 阳泉市| 营口市| 且末县| 南召县| 石阡县| 永顺县| 芮城县| 武胜县| 沅陵县| 宝应县| 随州市| 凤台县| 麻栗坡县| 田东县| 五指山市| 邓州市| 凤阳县| 黄骅市| 黄石市| 中阳县| 太谷县| 凤山县| 威海市| 汕头市|