<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
public enum QueueTypeEnum { ARRAY_BLOCKING_QUEUE(1, "ArrayBlockingQueue"), LINKED_BLOCKING_QUEUE(2, "LinkedBlockingQueue"), DELAY_QUEUE(3, "DelayQueue"), PRIORITY_BLOCKING_QUEUE(4, "PriorityBlockingQueue"), SYNCHRONOUS_QUEUE(5, "SynchronousQueue"), LINKED_TRANSFER_QUEUE(6, "LinkedTransferQueue"), LINKED_BLOCKING_DEQUE(7, "LinkedBlockingDeque"), VARIABLE_LINKED_BLOCKING_QUEUE(8, "VariableLinkedBlockingQueue"), MEMORY_SAFE_LINKED_BLOCKING_QUEUE(9, "MemorySafeLinkedBlockingQueue"); }
無界阻塞佇列LinkedTransferQueue,此佇列也是基於連結串列實現,對於所有給定的元素都是先入先出的。LinkedTransferQueue可以算是 LinkedBolckingQueue 和 SynchronousQueue 的合體。SynchronousQueue 內部無法儲存元素,當要新增元素的時候,需要阻塞。
LinkedBolckingQueue 則內部使用了大量的鎖,效能有所下降。
public class LinkedTransferQueue<E> extends AbstractQueue<E> implements TransferQueue<E>, java.io.Serializable {
相對於其他阻塞佇列,LinkedTransferQueue多了 tryTransfer(E e)和transfer(E e) 方法。
public interface TransferQueue<E> extends BlockingQueue<E> { // 如果可能,立即將元素轉移給等待的消費者。 // 更確切地說,如果存在消費者已經等待接收它(在 take 或 timed poll(long,TimeUnit)poll)中,則立即傳送指定的元素,否則返回 false。 boolean tryTransfer(E e); // 將元素轉移給消費者,如果需要的話等待。 // 更準確地說,如果存在一個消費者已經等待接收它(在 take 或timed poll(long,TimeUnit)poll)中,則立即傳送指定的元素,否則等待直到元素由消費者接收。 void transfer(E e) throws InterruptedException; // 上面方法的基礎上設定超時時間 boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException; // 如果至少有一位消費者在等待,則返回 true boolean hasWaitingConsumer(); // 返回等待消費者人數的估計值 int getWaitingConsumerCount(); }
LinkedTransferQueue 消費者執行緒獲取取資料時:呼叫take poll 等方法
如果佇列不為空,則直接取走資料,若佇列為空則消費者執行緒會生成一個佔位虛擬節點(節點元素為null)入隊,並等待在這個節點上,後面生產者執行緒請求新增資料時,會從單向連結串列的head節點開始遍歷,如果發現某個節點是一個取數請求任務型別的節點(即是這個節點的isData為false,item == null),生產者執行緒就不入隊了,直接就將元素填充到該節點(元素傳遞給它),並喚醒該節點等待的消費者執行緒,被喚醒的消費者執行緒取走元素。
tryTransfer(E e)方法
tryTransfer(E e) 當生產者執行緒呼叫tryTransfer方法時,如果沒有消費者等待接收元素,則會立即返回false。該方法和transfer方法的區別就是tryTransfer方法無論消費者是否接收,方法立即返回,而transfer方法必須等到消費者消費後才返回。
tryTransfer(E e, long timeout, TimeUnit unit) 加上了限時等待功能,如果沒有消費者消費該元素,則等待指定的時間再返回;如果超時還沒消費元素,則返回false,如果在超時時間內消費了元素,則返回true。
transfer(E e)方法
transfer方法,用於將指定元素e傳遞給消費者執行緒(呼叫take/poll方法)。如果有消費者執行緒正在阻塞等待,則呼叫transfer方法的執行緒會直接將元素傳遞給它;
如果沒有消費者執行緒等待獲取元素,則呼叫transfer方法的執行緒會將元素插入到隊尾,然後阻塞等待,直到出現一個消費者執行緒獲取元素。
以上就是Java執行緒池佇列LinkedTransferQueue範例詳解的詳細內容,更多關於Java LinkedTransferQueue的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45