java 先入先出,java_阻塞队列(FIFO先进先出)
java_阻塞隊(duì)列(FIFO先進(jìn)先出)
ArrayBlockingQueue:由數(shù)組結(jié)構(gòu)組成的有界阻塞隊(duì)列;
LinkedBlockingQueue:由鏈表結(jié)構(gòu)組成的有界阻塞隊(duì)列(但大小默認(rèn)值為:Integer.MAX_VALUE);
PriorityBlockingQueue:支持優(yōu)先級(jí)排序的***阻塞隊(duì)列;
DelayQueue:使用優(yōu)先級(jí)隊(duì)列實(shí)現(xiàn)的延遲***阻塞隊(duì)列;
SynchronousQueue:不存儲(chǔ)元素的阻塞隊(duì)列,也即單個(gè)元素的隊(duì)列;
LinkedTransferQueue:由鏈表結(jié)構(gòu)組成的***阻塞隊(duì)列;
LinkedBlockingDeque:由鏈表結(jié)果組成的雙向阻塞隊(duì)列;
阻塞隊(duì)列核心方法
add(e):為阻塞隊(duì)列添加一個(gè)元素e,添加成功返回 true,當(dāng)阻塞隊(duì)列滿時(shí),拋出異常 java.lang.IllegalStateException: Queue full
remove():為阻塞隊(duì)列移除一個(gè)元素,移除成功時(shí)返回移除的元素,當(dāng)阻塞隊(duì)列為空時(shí),拋出異常?java.util.NoSuchElementException
element():檢查當(dāng)前阻塞隊(duì)列的首個(gè)元素,成功時(shí)返回首個(gè)元素,當(dāng)阻塞隊(duì)列為空時(shí),拋出異常?java.util.NoSuchElementException
offer(e):為阻塞隊(duì)列添加一個(gè)元素e,添加成功返回 true,當(dāng)阻塞隊(duì)列滿時(shí)返回?false
poll():為阻塞隊(duì)列移除一個(gè)元素,移除成功時(shí)返回移除的元素,當(dāng)阻塞隊(duì)列為空時(shí),返回 null
peek():檢查當(dāng)前阻塞隊(duì)列的首個(gè)元素,成功時(shí)返回首個(gè)元素,當(dāng)阻塞隊(duì)列為空時(shí),返回 null
put(e):為阻塞隊(duì)列添加一個(gè)元素e,無(wú)返回值,當(dāng)阻塞隊(duì)列滿時(shí)會(huì)阻塞線程,直到操作成功為止
take():為阻塞隊(duì)列移除一個(gè)元素,成功時(shí)返回首個(gè)元素,當(dāng)阻塞隊(duì)列為空時(shí)會(huì)阻塞線程,直到操作成功為止
offer(e,time,unit):為阻塞隊(duì)列添加一個(gè)元素e,添加成功返回?true,當(dāng)阻塞隊(duì)列滿時(shí)會(huì)阻塞隊(duì)列一段時(shí)間(time:long類型的時(shí)間,unit為時(shí)間單位),失敗返回?false
poll(time,unit):為阻塞隊(duì)列移除一個(gè)元素,移除成功時(shí)返回移除的元素,當(dāng)阻塞隊(duì)列為空時(shí),會(huì)阻塞隊(duì)列一段時(shí)間(time:long類型的時(shí)間,unit為時(shí)間單位),失敗返回??null
SynchronousQueue:不存儲(chǔ)元素的阻塞隊(duì)列
public?class?SynchronousQueueDemo?{public?static?void?main(String[]?args)?{
BlockingQueue?queue?=?new?SynchronousQueue<>();new?Thread(()?->{try?{
System.out.println(Thread.currentThread().getName()+"\t?put?1");
queue.put(1);
System.out.println(Thread.currentThread().getName()+"\t?put?2");
queue.put(2);
System.out.println(Thread.currentThread().getName()+"\t?put?3");
queue.put(3);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
},"A").start();new?Thread(()?->{try?{try?{?TimeUnit.SECONDS.sleep(3);?}catch?(Exception?e){?e.printStackTrace();?}
System.out.println(Thread.currentThread().getName()+"\t"+queue.take());try?{?TimeUnit.SECONDS.sleep(3);?}catch?(Exception?e){?e.printStackTrace();?}
System.out.println(Thread.currentThread().getName()+"\t"+queue.take());try?{?TimeUnit.SECONDS.sleep(3);?}catch?(Exception?e){?e.printStackTrace();?}
System.out.println(Thread.currentThread().getName()+"\t"+queue.take());
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
},"B").start();
}
}
總結(jié)
以上是生活随笔為你收集整理的java 先入先出,java_阻塞队列(FIFO先进先出)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java socket编程客户端_Jav
- 下一篇: C语言小游戏 ——推箱子