arrayblockingqueue是concurrent包提供的乙個執行緒安全的佇列,由乙個陣列來儲存佇列元素.通過[b]takeindex[/b]和[b]putindex[/b]來分別記錄出佇列和入佇列的下標,以保證在出佇列時[b]不進行元素移動[/b].
//在出佇列或者入佇列的時候對takeindex或者putindex進行累加,如果已經到了陣列末尾就又從0開始,保證陣列的迴圈使用.
final int inc(int i)
//入佇列操作
private void insert(e x)
//使用offer入佇列,如果佇列已滿就立即返回false
public boolean offer(e e)
} finally
}//使用put入佇列的話,如果佇列已滿當前執行緒就等待然後釋放鎖,直到被notfull喚醒,再重新檢查,直到成功插入佇列
public void put(e e) throws interruptedexception finally
}//出佇列操作
private e extract()
//poll出隊是不需要等待的,如果當前佇列是空就直接返回null
public e poll() finally
}//take就跟put一樣,如果佇列是空的就等待直到被notempty喚醒
public e take() throws interruptedexception finally
}
最後需要注意的就是帶[b]超時[/b]喚醒的是[b]offer[/b]和[b]poll[/b]而不是put和take
讀JDK原始碼 之NUMBER
number是乙個抽象類,他是bigdecimal,biginteger,byte,double,float,integer,long,short的父類 他提供以下抽象方法 1 public abstract int intvalue 該方法把此物件所代表的值轉換為int 2 public abst...
讀HashSet原始碼
先看建構函式 public hashset public hashset int initialcapacity public hashset int initialcapacity,float loadfactor 這個構造方法不是public的,僅用於linkedhashset.hashset ...
讀LockSupport原始碼
locksupport類是其他類實現鎖和同步的基礎 basic thread blocking primitives for creating locks and other synchronization classes.讀了原始碼就會知道,這個類主要利用了unsafe類中提供的part和unpa...