原创 函數式編程基礎

前言 何謂函數式編程 編程語言主要有三種類型: 1. 命令式編程:專注於“如何去做”,所有的事情都按照你的命令去做; 2. 函數式編程:把運算的過程儘量表現成一系列的嵌套函數調用,相比命令式編程關心解決問題的步驟,它更關心數據之間的映

原创 垃圾回收基礎

垃圾回收(Garbage Collection,GC)是虛擬機內存管理很重要的一個模塊,它幫助虛擬機在技術層面上做到了內存動態分配後的回收。垃圾回收主要發生在線程公有的區域。GC主要完成這樣三件事情: 確定哪些內存需要回收; 確定待回收

原创 java中的讀寫鎖

引言 鎖(Lock)是java一個很重要的同步組件,Lock提供了跟synchronized關鍵字一樣的功能,相比synchronized更加靈活,但是實現也更加複雜。 鎖的分類: 鎖主要分爲排他鎖和讀寫鎖。 排他鎖:在同一時刻只允

原创 java併發編程之Semaphore

Semaphore,信號量,一般用來控制同時訪問特定共享資源的線程數,它通過協調各個線程來保證使用公共資源的合理性。 應用場景 Semaphore,從字面上其實不太好理解它的意思,換個通俗易懂的比喻吧,Semaphore就好比是馬路上控制

原创 java併發編程之Condition

引言 在java中,對於任意一個java對象,它都擁有一組定義在java.lang.Object上監視器方法,包括wait(),wait(long timeout),notify(),notifyAll(),這些方法配合synchron

原创 java併發之ReentrantLock

ReentrantLock,可重入鎖,支持一個線程對公有資源重複加鎖。當然,ReentrantLock還支持公平性的獲取鎖和非公平性的獲取鎖。 注:何謂獲取鎖的公平性? 每一個線程在獲取鎖的時候可能都會排隊等待,如果在等待時間上,

原创 ScheduledThreadPoolExecutor源碼解析

ScheduledThreadPoolExecutor主要用來定期執行任務,或者是在給定的延遲之後運行任務。它的功能與Timer類似,但是比起Timer,ScheduledThreadPoolExecutor功能更強大,使用也更靈活。 S

原创 java併發編程之CompletionService

應用場景 當向Executor提交多個任務並且希望獲得它們在完成之後的結果,如果用FutureTask,可以循環獲取task,並調用get方法去獲取task執行結果,但是如果task還未完成,獲取結果的線程將阻塞直到task完成,由於不知

原创 java併發編程之AbstractQueuedSynchronizer

引言 AbstractQueuedSynchronizer,隊列同步器,簡稱AQS,它是java併發用來構建鎖或者其他同步組件的基礎框架。 一般使用AQS的主要方式是繼承,子類通過實現它提供的抽象方法來管理同步狀態,主要管理的方式是通過

原创 Thread源碼解析

引言 在介紹Thread源碼之前先簡要介紹一下線程相關的一些基礎知識。 線程定義 線程是現代操作系統調度的最小單元,一個進程可以創建多個線程來提高系統的吞吐量和執行效率。 注:進程是操作系統資源分配和調度的基本單位,它可以創建多個線程,

原创 java併發編程之FutureTask

引言 FutureTask實現了接口Future,同Future一樣,代表異步計算的結果。當然,FutureTask除了實現Future接口之外,還實現了Runnable接口,所以,FutureTask既可以由Executor來調度執行,

原创 JVM之Java內存區域

對於從事C系列程序員來說,他們既擁有每一個對象的所有權,又擔負着維護每一個對象生命週期。但是對於Java程序員來說,JVM幫忙管理了每一個對象的內存使用,程序員們不需要再花時間爲每一個new操作配對一個delete或者free操作,這樣子

原创 ThreadPoolExecutor源碼分析

引言 爲什麼引入線程池技術? 對於服務端的程序,經常面對的是執行時間較短、工作內容較爲單一的任務,需要服務端快速處理並返回接口。假若服務端每次接收到一個任務,就創建一個線程,然後執行,這種方式在原型階段是不錯的選擇,但是面對成千上萬的任

原创 java併發之synchronized

synchronized,在java併發編程中它一直都是元老級的角色。但是在大多數時候,如果能使用Lock大家可能都不會使用它,因爲它是個重量級鎖。但是隨着jdk6引入偏向鎖和輕量級鎖,對它進行了各種優化之後,在一些情況下它並不是那麼重了

原创 java併發編程之Lock接口

引言 鎖,是java se 5之後提出的,它同synchronized關鍵字一樣,都是用來控制多個線程對臨界區訪問的。 Lock與synchronized之間的區別和聯繫 在總結兩者的區別和聯繫之前先引入兩個概念:隱式鎖和顯式鎖。 隱