原创 讀寫鎖ReentranReadWriteLock

讀寫鎖簡介 在併發場景中用於解決線程安全的問題,我們幾乎會高頻率的使用到獨佔式鎖,通常使用java提供的關鍵字 synchronized或者concurrents包中實現了Lock接口的ReentrantLock。它們都是獨佔式獲取鎖

原创 ReentrantLock

ReentrantLock介紹 ReentrantLock重入鎖,是實現Lock接口的一個類,也是在實際編程中使用頻率很高的一個鎖,支持重入性,表示能夠對共享資源能夠重複加鎖,即當前線程獲取該鎖再次獲取不會被阻塞。 java關鍵字sy

原创 線程池

概念 Java中的線程池(juc包下)是運用場景多的併發框架,幾乎所有需要異步或者併發執行任務的程序都可以使用線程池。 使用線程池的有三個優點: 降低資源的消耗:通過重複利用已創建的線程降低線程創建和銷燬帶來來的消耗 提高響應速度:

原创 Condition的await和signal等待/通知機制

Condition簡介 任何一個java對象都天然繼承於Object類,在線程間實現通信的往往會應用到Object的幾個方法,比如 wait(),wait(long timeout),wait(long timeout, int na

原创 AQS詳解

AQS簡介 在同步組件的實現中,AQS是核心部分,同步組件的實現者通過使用AQS提供的模板方法實現同步組件語義。 AQS 則實現了對同步狀態的管理,以及對阻塞線程進行排隊,等待通知等等一些底層的實現處理。 AQS的核心也包括了這些方

原创 Lock體系

Lock簡介 鎖是用來控制多個線程訪問共享資源的方式,一般來說,一個鎖能夠防止多個線程同時訪問共享資源。在Lock接口出現之前,java程序主要是靠synchronized關鍵字實現鎖功能的,而JDK5之後,併發包中增加了lock接口

原创 多線程常用操作

線程命名與取得 多線程的運行狀態是不確定的,所以對於多線程操作必須有一個明確標識出線程對象的信息,這個信息往往通過名稱來描述。在Thread類中提供有如下的線程名稱方法: class MyThread implements Run

原创 synchronized優化

序言 在JDK1.5中,synchronized是性能低效的。因爲這是一個重量級操作,它對性能大的影響是阻塞的是實現,掛起 線程和恢復線程的操作都需要轉入內核態中完成,這些操作給系統的併發性帶來了很大的壓力。相比之下使用Java 提供

原创 synchronized 同步

同步問題的引出 需求:多個線程同時賣票 class MyThread implements Runnable { private int ticket = 10; @Override public void r

原创 多線程的實現

繼承Thread類實現多線程 java.lang.Thread是一個線程操作的核心類。新建一個線程簡單的方法就是直接繼承Thread類,而後覆寫該類中的 run()方法(就相當於主類中的main方法) package www.bit.

原创 Lambda表達式和接口增強

Lambda表達式 Lambda是JDK1.8推出的重要新特性。很多開發語言都開始支持函數式編程,其中最具備代表性的就是haskell。 函數式編程和麪向對象編程可以理解爲兩大開發陣營。很多人認爲面向對象的概念過於完整,結構操作不明確

原创 註解

@Override 準確覆寫 當子類覆寫父類方法時,此註解檢查覆寫的方法是否正確聲明,只有滿足覆寫方法要求才會編譯通過,否則編譯報錯。 class Person { @Override public String to

原创 方法引用

從最初開始,只要是進行引用都是針對於引用類型完成的,也就是隻有數組、類、接口具備引用操作。但是JDK1.8 開始追加了方法引用的概念。實際上引用的本質就是別名。所以方法的引用也是別名的使用。而方法引用的類型有四種形式: 引用靜態方法:

原创 雙向鏈表設計

interface ILink { /** * 鏈表增加節點操作 * @param data 節點內容 * @return */ boolean add(Object dat

原创 包裝類

定義 包裝類就是將基本數據類型封裝到類中,目的是爲了讓基本類型也能讓Object來接收。 class IntDemo { private int intValue; public IntDemo(int intValu