BlockingQueue的阻塞策略有以下幾種:
ArrayBlockingQueue:基于數組實現的有界阻塞隊列,當隊列滿時,生產者阻塞直到隊列有空間;當隊列為空時,消費者阻塞直到隊列有元素。
LinkedBlockingQueue:基于鏈表實現的有界或無界阻塞隊列,其內部實現了兩個鎖分別用于生產者和消費者的阻塞操作。
PriorityBlockingQueue:基于優先級堆實現的無界阻塞隊列,元素按照優先級順序出隊,插入時會調整堆結構。
SynchronousQueue:不存儲元素的阻塞隊列,生產者線程插入一個元素后會被阻塞,直到有消費者線程取出該元素。
DelayQueue:延遲隊列,元素必須實現Delayed接口,元素只有在延遲時間到達時才能被消費。
LinkedTransferQueue:基于鏈表的無界阻塞隊列,添加了一些額外的方法,如tryTransfer()和tryTransfer(E e, long timeout, TimeUnit unit)。
LinkedBlockingDeque:基于鏈表的阻塞雙端隊列,可以在隊列的兩端進行操作,也可以設置容量限制。