ArrayBlockingQueue原始碼解讀

2022-03-23 09:00:34 字數 1815 閱讀 5494

arrayblockingqueue是乙個基於陣列實現的有界的阻塞佇列。

//

底層儲存元素的陣列。為final說明一旦初始化,容量不可變,所以是有界的。

final

object items;

//下乙個take, poll, peek or remove操作的index位置

inttakeindex;

//下乙個put, offer, or add操作的index位置

intputindex;

//元素數量

intcount;

/*** 用於併發控制:使用經典的雙condition演算法

*/final

reentrantlock lock;

/**獲取操作等待條件

*/private

final

condition notempty;

/**插入操作等待條件

*/private

final condition notfull;

add()是最原始的方法。當佇列滿時,會丟擲illegalstateexception。

public

boolean

add(e e)

//父類abstractqueue中的add()

public

boolean

add(e e)

offer有兩個版本。

不帶超時版本:佇列滿時,直接返回false。

帶超時版本:佇列滿時,阻塞直到佇列可用。

public

boolean

offer(e e)

} finally

}/**offer,帶超時版本*

*/public

boolean offer(e e, long

timeout, timeunit unit)

throws

interruptedexception

//阻塞直到佇列可用,則插入元素

insert(e);

return

true

; }

finally

}

public

void put(e e) throws

interruptedexception

finally

}

public

e poll()

finally

}private

e extract()

/**poll,帶超時版本*

*/public e poll(long timeout, timeunit unit) throws

interruptedexception

return

extract();

} finally

}

public e take() throws

interruptedexception

finally

}

public

e peek()

finally

}

public

void

clear()

finally

}

總結blockingqueue介面提供了3個新增元素方法。

同時,blockingqueue介面提供了3個獲取(並刪除)元素的方法。

azkaban web server原始碼解析

azkaban主要用於hadoop相關job任務的排程,但也可以應用任何需要排程管理的任務,可以完全代替crontab。azkaban主要分為web server 任務上傳,管理,排程 executor server 接受web server的排程指令,進行任務執行 1.資料表 projects 工...

JDK LinkedHashMap原始碼解析

今天來分析一下jdk linkedhashmap的源 public class linkedhashmapextends hashmapimplements map可以看到,linkedhashmap繼承自hashmap,並且也實現了map介面,所以linkedhashmap沿用了hashmap的大...

Redux原始碼createStore解讀常用方法

const store createstore reducer,preloadedstate enhancer 直接返回當前currentstate,獲取state值,return state 我覺得應該深轉殖乙個新的物件返回,不然有可能會被外部修改 function getstate consol...