原创 JUC集合類 CopyOnWriteArrayList源碼解析 JDK8

文章目錄前言核心成員常用方法getsetaddremoveremove(int index)remove(Object o)index >= lenindex < lenfindIndex代碼塊之後cleartoArray迭代器總

原创 JUC集合類 CopyOnWriteArraySet源碼解析 JDK8

文章目錄前言與CopyOnWriteArrayList不同之處addIfAbsentaddAllAbsent總結 前言 類似於上一篇講的CopyOnWriteArrayList,CopyOnWriteArraySet可以認爲是一個

原创 ReentrantReadWriteLock的readerShouldBlock與apparentlyFirstQueuedIsExclusive 深入理解讀鎖的非公平實現

文章目錄前言writerShouldBlock的非公平實現readerShouldBlock的非公平實現寫鎖無限等待 indefinite writer starvationheuristic啓發式地防止new reader總結

原创 SocketChannel 使用open或connect/finishConnect

文章目錄使用connect效果在select循環外使用finishConnect使用open總結 首先給出一個通用的服務端代碼: package NonBlocking; import java.io.IOException;

原创 Java反射 獲得Class對象的五種方法

class building {} class Maker<T> { Class<T> kind; Maker(Class<T> kind){ this.kind = kind; }

原创 Java NIO 註冊事件的正確姿勢 以及對attach()的理解

Selector與SelectionKey與Channel之間的關係 看完Selector的api文檔,相信大家已經有了認識。 當你註冊channel給Selector的時候,會把一個key與channel關聯起來。 key包

原创 JUC框架 ReentrantReadWriteLock源碼解析 JDK8

文章目錄前言重要成員內部類關係構造器Sync的成員同步器狀態的劃分讀鎖計數部分寫鎖的獲取和釋放寫鎖的獲取寫鎖的釋放讀鎖的獲取和釋放讀鎖的獲取讀鎖的釋放鎖降級總結 前言 ReentrantReadWriteLock是我閱讀了AQS源

原创 JUC框架 CyclicBarrier源碼解析 JDK8

文章目錄前言與CountDownLatch的區別重要成員構造器輔助方法nextGenerationbreakBarrierresetawait從問題分析深入理解CyclicBarrier有幾種線程在執行?一代線程們通過barrie

原创 Java NIO中一方斷開連接或shutdownOutput 另一方不斷READ事件

文章目錄select循環裏,不斷有READ就緒事件手動停止服務端,客戶端read拋出異常服務端調用close,客戶端read返回-1調用shutdownOutput後,不斷的READ事件 select循環裏,不斷有READ就緒事件

原创 Java 用NIO實現一個聊天室(多人聊天、單人聊天)

文章目錄多人在線,多人聊天(可能有TCP粘包bug)多人在線,多人聊天(簡單解決了TCP粘包bug)多人在線,單人聊天參考博客 多人在線,多人聊天(可能有TCP粘包bug) 服務端: package NonBlocking; i

原创 JUC框架 CountDownLatch源碼解析 JDK8

文章目錄前言實現核心構造器核心方法countDown()await()await(long timeout, TimeUnit unit)對比兩個await方法返回時的情況分析兩種線程總結 前言 CountDownLatch是一種

原创 JUC框架 Semaphore源碼解析 JDK8

文章目錄前言重要成員構造器獲取信號量(減小state)非公平實現的tryAcquireShared公平實現的tryAcquireShared釋放信號量(增加state)工具方法tryAcquirereducePermitsdrai

原创 【LeetCode.27】 移除元素

題目描述 給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後數組的新長度。 不要使用額外的數組空間,你必須僅使用 O(1) 額外空間並 原地 修改輸入數組。 元素的順序可以改變。

原创 【LeetCode.1】兩數之和

問題描述 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個數組中同樣的元素。 給定 num

原创 PrintStream和PrintWriter的區別和聯繫

文章目錄前言二者的構造器分析二者的方法分析PrintStream的write方法們PrintWriter的write方法們 前言 這兩者在往文件中寫入字符串時,最終都需要通過字符集的映射關係得到對應字節。 但這二者在通過char