基於陣列實現阻塞佇列

2021-09-25 06:26:59 字數 1643 閱讀 2727

基於陣列實現的話,需要額外兩個指標,乙個指向頭元素,乙個指向尾元素。

出的時候從頭元素出去,入的時候從尾元素入。

即出的時候tail指標+1,入的時候尾指標+1 ,因此使用乙個環形佇列最好,不會浪費空間也不需要挪動元素位置。

因為是環形佇列,因此tail在最後乙個位置的時候,再進來乙個元素,如果佇列不滿,就會挪到第乙個位置上。

計算環形佇列的位置公式為 : tail = (tail + 1) % length header = (header + 1) % length

tail和header為陣列位置的下標

/**

* @classname blockqueue

* @author laixiaoxing

* @date 2019/7/14 下午5:50

* @descriptio 基於陣列實現阻塞佇列

* @version 1.0

*/public class blockqueue

private void put(t t) throws interruptedexception else }}

private t get() throws interruptedexception else }}

public static void main(string args) throws interruptedexception catch (interruptedexception e)

try catch (interruptedexception e)

}}).start();

new thread(()->

} catch (interruptedexception e)

try catch (interruptedexception e)

}}).start();}}

輸出如下

生產者生產: 0

消費者消費: 0

生產者生產: 1

生產者生產: 2

生產者生產: 3

消費者消費: 1

生產者生產: 4

生產者生產: 5

佇列已滿

消費者消費: 2

生產者生產: 6

生產者生產: 7

佇列已滿

消費者消費: 3

生產者生產: 8

生產者生產: 9

佇列已滿

消費者消費: 4

生產者生產: 10

生產者生產: 11

佇列已滿

消費者消費: 6

生產者生產: 12

生產者生產: 13

佇列已滿

消費者消費: 8

生產者生產: 14

生產者生產: 15

佇列已滿

消費者消費: 10

生產者生產: 16

生產者生產: 17

佇列已滿

消費者消費: 12

生產者生產: 18

生產者生產: 19

佇列已滿

消費者消費: 14

阻塞佇列實現

0前言 1實現原始碼 1.1 鎖封裝 通過訊號量保證不同執行緒之間資料操作的一致性。class csemaphore csemaphore void produce void consume bool try return true bool trytime int micsec int ret s...

基於陣列實現的佇列

author qcg version 2019 5 13.description 基於陣列實現的佇列 佇列的型別 順序佇列 鏈式佇列 迴圈佇列 阻塞佇列 併發佇列 public class myarrayqueue 入隊 param item 入隊元素 return 是否成功 public bool...

基於陣列實現佇列結構

package com.hand.deque 基於陣列實現的一次性佇列 public class arrayqueue 佇列是否已滿 return public boolean isfull 佇列是否為空 return public boolean isempty 向佇列中新增元素 param n ...