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。
publicboolean
add(e e)
//父類abstractqueue中的add()
public
boolean
add(e e)
offer有兩個版本。
不帶超時版本:佇列滿時,直接返回false。
帶超時版本:佇列滿時,阻塞直到佇列可用。
publicboolean
offer(e e)
} finally
}/**offer,帶超時版本*
*/public
boolean offer(e e, long
timeout, timeunit unit)
throws
interruptedexception
//阻塞直到佇列可用,則插入元素
insert(e);
return
true
; }
finally
}
publicvoid put(e e) throws
interruptedexception
finally
}
publice poll()
finally
}private
e extract()
/**poll,帶超時版本*
*/public e poll(long timeout, timeunit unit) throws
interruptedexception
return
extract();
} finally
}
public e take() throwsinterruptedexception
finally
}
publice peek()
finally
}
publicvoid
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...