原创 Java 虛擬機 讀書筆記

第一部分 走近Java 第1章 走近Java 1.1 概述 1.2 Java技術體系 1.3 Java發展史 1.4 Java虛擬機發展史 1.4.1 Sun Classic Exact VM 1.4.2 Sun HotSpot VM 1

原创 【Java併發編程實戰】-----“J.U.C”:ReentrantLock之二lock方法分析

前一篇博客簡單介紹了ReentrantLock的定義和與synchronized的區別,下面跟隨LZ的筆記來扒扒ReentrantLock的lock方法。我們知道ReentrantLock有公平鎖、非公平鎖之分,所以lock()我也已公

原创 【Java併發編程實戰】-----“J.U.C”:CyclicBarrier

下面LZ介紹CyclicBarrier。在JDK API中是這麼介紹的: 一個同步輔助類,它允許一組線程互相等待,直到到達某個公共屏障點 (common barrier point)。在涉及一組固定大小的線程的程序中,這些線程必須不時

原创 【Java併發編程實戰】-----“J.U.C”:CountDownlatch

LZ介紹了CyclicBarrier。CyclicBarrier所描述的是“允許一組線程互相等待,直到到達某個公共屏障點,纔會進行後續任務”。而CountDownlatch和它也有一點點相似之處:CountDownlatch所描述的是“

原创 spring IOC初始化過程

我們來看一個例子 AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(JobService.class);

原创 spring IOC 容器初始化

一、ApplicationContext接口設計 ApplicationContext是spring中較高級的容器。和BeanFactory類似,它可以加載配置文件中定義的bean,當有請求的時候分配bean。 另外,它增加了企業所需要的

原创 【Java併發編程實戰】----- AQS(三):阻塞、喚醒:LockSupport

在上篇博客(【Java併發編程實戰】----- AQS(二):獲取鎖、釋放鎖)中提到,當一個線程加入到CLH隊列中時,如果不是頭節點是需要判斷該節點是否需要掛起;在釋放鎖後,需要喚醒該線程的繼任節點 lock方法,在調用acquire

原创 【Java併發編程實戰】-----“J.U.C”:鎖,lock

在java中有兩種方法實現鎖機制,一種是在前一篇博客中(【java7併發編程實戰】-----線程同步機制:synchronized)介紹的synchronized,而另一種是比synchronized更加強大和領過的Lock。Lock確

原创 【Java併發編程實戰】-----“J.U.C”:Condition

在看Condition之前,我們先來看下面這個例子: 工廠類,用來存放、取出商品: public class Depot { private int depotSize; //倉庫大小 private Lo

原创 【Java併發編程實戰】-----“J.U.C”:ReentrantLock之三unlock方法分析

前篇博客LZ已經分析了ReentrantLock的lock()實現過程,我們瞭解到lock實現機制有公平鎖和非公平鎖,兩者的主要區別在於公平鎖要按照CLH隊列等待獲取鎖,而非公平鎖無視CLH隊列直接獲取鎖。但是對於unlock()而已,

原创 【Java併發編程實戰】-----“J.U.C”:CLH隊列鎖

在前面介紹的幾篇博客中總是提到CLH隊列,在AQS中CLH隊列是維護一組線程的嚴格按照FIFO的隊列。他能夠確保無飢餓,嚴格的先來先服務的公平性。下圖是CLH隊列節點的示意圖: 在CLH隊列的節點QNode中包含有一個locked

原创 【Java併發編程實戰】----- AQS(四):CLH同步隊列

AQS裏面的CLH隊列是CLH同步鎖的一種變形。其主要從兩方面進行了改造:節點的結構與節點等待機制。在結構上引入了頭結點和尾節點,他們分別指向隊列的頭和尾,嘗試獲取鎖、入隊列、釋放鎖等實現都與頭尾節點相關,並且每個節點都引入前驅節點和後

原创 【Java併發編程實戰】----- AQS(二):獲取鎖、釋放鎖

上篇博客稍微介紹了一下AQS,下面我們來關注下AQS的所獲取和鎖釋放。 AQS鎖獲取 AQS包含如下幾個方法: acquire(int arg):以獨佔模式獲取對象,忽略中斷。 acquireInterruptibly(int

原创 【Java併發編程實戰】-----“J.U.C”:Semaphore

信號量Semaphore是一個控制訪問多個共享資源的計數器,它本質上是一個“共享鎖”。 Java併發提供了兩種加鎖模式:共享鎖和獨佔鎖。前面LZ介紹的ReentrantLock就是獨佔鎖。對於獨佔鎖而言,它每次只能有一個線程持有,而共

原创 【Java併發編程實戰】-----“J.U.C”:Phaser

Phaser由java7中推出,是Java SE 7中新增的一個使用同步工具,在功能上面它與CyclicBarrier、CountDownLatch有些重疊,但是它提供了更加靈活、強大的用法。 CyclicBarrier,允許一組線程