原创 Java多線程——FutureTask源碼解析

一個很常見的多線程案例是,我們安排主線程作爲分配任務和彙總的一方,然後將計算工作切分爲多個子任務,安排多個線程去計算,最後所有的計算結果由主線程進行彙總。比如,歸併排序,字符頻率的統計等等。 我們知道Runnable是不返回計算結果的,如果

原创 Java多線程——ThreadLocal源碼解析

ThreadLocal 這個類提供線程局部變量。這些變量在每一個線程中的正常副本都不相同,每一個線程訪問一個副本(通過其 get或 set法),副本有自己獨立的變量初始化複製。ThreadLocal實例通常是類中私有的靜態字段希望關聯狀態和

原创 Java多線程——ConcurrentHashMap源碼解析

在之前討論HashMap與HashTable時提到過,HashMap沒有任何關於線程安全的處理,所以它不適合線程不安全的場景,而HashTable所有的操作方法都是加鎖的,所以它是線程安全的,但是由於HashTable的一些設計上的缺陷比如

原创 Java序列化 ObjectInputStream源碼解析

上一篇講了類的序列化,今天要講類的反序列化,ObjectInputStream。 從內部變量中我們可以看出,內部包含一個塊輸入流,因爲有handle機制所以也有一個內部緩存表但不是hash表 /** 處理數據塊轉換的過濾流 */

原创 Java序列化 ObjectOutputStream源碼解析

概述 衆所周知,Java原生的序列化方法可以分爲兩種: 實現Serializable接口 實現Externalizable接口 其實還有一種,可以完全自己實現轉爲二進制內容,用Unsafe寫到內存裏面,然後寫入文件 Serializab