讀原始碼之 ArrayBlockingQueue

2021-09-02 06:39:52 字數 842 閱讀 2431

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...