原创 Fork-Join框架

Fork-Join框架 Fork和Join是java 1.7提供的用於定型執行的框架,將大任務切分成若干個小任務執行,小任務執行結果彙總成大任務的框架。從字面上理解就是Fork把大任務切分成若干個小任務Join就是把小任務合併得到大任務結果

原创 AQS同步組件--ReentrantLock與鎖

ReentrantLock與鎖 Synchronized和ReentrantLock異同 可重入性:兩者都具有可重入性 鎖的實現:Synchronized是依賴jvm實現的,ReentrantLock是jdk實現的。(我們可以理解爲一個是

原创 AQS同步組件--CyclicBarrier

CyclicBarrier CyclicBarrier也是一個同步輔助類,它允許一組線程相互等待直到到達某個工作屏障點,通過他可以完成多線程之間的相互等待。每個線程都就緒之後才能執行後面的操作。和CountLatch有相似的地方都是通過計數

原创 AQS同步組件--Semaphore

Semaphore 什麼是Semaphore? 是用於控制某個資源同一時間被線程訪問的個數,提供acquire()和release()方法,acquire獲取一個許可,如果沒有獲取的到就等待,release是在操作完成後釋放一個許可,Sem

原创 AQS同步組件--CountDownLatch

CountDownLatch CountDownLatch是在java1.5被引入的,跟它一起被引入的併發工具類還有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它們都存在於

原创 線程封閉

我們可以通過把對象設計成不可變對象來躲避併發,我們還可以通過使用線程封閉來實現線程安全,所謂線程封閉 就是將數據都封裝到一個線程裏,不讓其他線程訪問。 Ad-hoc 線程封閉程序控制實現,比較脆弱,儘量少用 堆棧封閉:局部變量,無併發問題

原创 安全發佈對像

發佈對像 定義: 是一個對象能夠被當前範圍之外的代碼所使用 對象溢出 一種錯誤的發佈。當一個對象該沒有構造完成時,就使被其他線程所見。 下面我們來看一下沒有安全發佈的對象 @Slf4j public class UnsafePublish

原创 線程安全-可見性

共享變量在線程間不可見的原因 線程的交叉執行 重排序結合線程交叉執行 共享變量更新後的值沒有在工作內存與主內存間及時更新 使用synchronized的來保證可見性 使用synchronized的兩條規定: 線程解鎖前,必須把共享變量

原创 線程安全性-原子性

線程安全性 定義 當多個線程訪問同一個類時,不管運行時環境採用何種調度方式,不論線程如何交替執行,在主調代碼中不需要額外的協同或者同步代碼時,這個類都可以表現出正確的行爲,我們則稱這個類爲線程安全的。 線程安全性 原子性:提供了互斥訪問,

原创 java8 內置函數(api)總結

常用的函數接口記錄方便以後翻吧 接口 參數 返回類型 說明 Predicate<T> T boolean 輸入某個值,輸出boolean 值,用於對某值進行判定 Consumer<T> T void 輸入某值,無輸出。用於消費

原创 java8-謂詞(predicate)

傳遞代碼 我們首先看一個例子,假設你有一個 Apple 類,它有一個getColor方法,還有一個變量inventory保存着一個Apples的列表。你可能想要選出所有的綠蘋果,並返回一個列表。通常我們用篩選(filter)一詞來表達這個概

原创 多線程併發-計算機基礎

CPU緩存一致性協議MESI CPU在摩爾定律的指導下以每18個月翻一番的速度在發展,然而內存和硬盤的發展速度遠遠不及CPU。這就造成了高性能能的內存和硬盤價格及其昂貴。然而CPU的高度運算需要高速的數據。爲了解決這個問題,CPU廠商在CP

原创 重新詳盡的理解HasMap

關於hashCode hashCode的存在主要是用於查找的快捷性,如Hashtable,HashMap等,hashCode是用來在散列存儲結構中確定對象的存儲地址的. 1.hashcode是用來查找的,如果你學過數據結構就應該知道,在查找

原创 Java多線程-Callable和Future

Callable和Future出現的原因 創建線程的2種方式,一種是直接繼承Thread,另外一種就是實現Runnable接口。 這2種方式都有一個缺陷就是:在執行完任務之後無法獲取執行結果。 如果需要獲取執行結果,就必須通過共享變量或者使

原创 MyBatis緩存介紹

MyBatis緩存介紹   正如大多數持久層框架一樣,MyBatis 同樣提供了一級緩存和二級緩存的支持   一級緩存: 基於PerpetualCache 的 HashMap本地緩存,其存儲作用域爲 Session,當 Session f