阻塞队列4组api
阻塞队列4组api
方式 | 抛出异常 | 有返回值,不抛出异常 | 阻塞 等待 | 阻塞超时 |
---|---|---|---|---|
添加 | add | offer() | put() | offer(e,long time,TimeUnit) |
移除 | remove | poll() | take() | poll(long time,TimeUnit) |
检测队首元素 | element | peek | - | - |
package BlockingQueueA;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
/**
* @author liu
*/
public class Demo01 {
public static void main(String[] args) throws InterruptedException {
Test04();
}
/**
* arrayBlockingQueue 队列抛出异常
* add、element、remove
*/
public static void Test01() {
ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);
System.out.println(BlockingQueue.add("a"));
System.out.println(BlockingQueue.add("b"));
System.out.println(BlockingQueue.add("c"));
//检测队列首元素
BlockingQueue.element();
//IllegalStateException: Queue full
//System.out.println(arrayBlockingQueue.add("d"));
System.out.println("-----------------------------------");
System.out.println(BlockingQueue.remove());
System.out.println(BlockingQueue.remove());
System.out.println(BlockingQueue.remove());
//NoSuchElementException
//System.out.println(arrayBlockingQueue.remove());
}
/**
* arrayBlockingQueue 队列不抛出异常
* offer、peek、poll
*/
public static void Test02() {
ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);
System.out.println(BlockingQueue.offer("a"));
System.out.println(BlockingQueue.offer("b"));
System.out.println(BlockingQueue.offer("c"));
//不报异常,返回boolean
System.out.println(BlockingQueue.offer("d"));
//检测队列首元素
System.out.println(BlockingQueue.peek());
System.out.println("-----------------------------------");
System.out.println(BlockingQueue.poll());
System.out.println(BlockingQueue.poll());
System.out.println(BlockingQueue.poll());
//不报异常,返回null
System.out.println(BlockingQueue.poll());
}
/**
* arrayBlockingQueue 队列一直阻塞
* put、take
*/
public static void Test03() throws InterruptedException {
//队列大小:3
ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);
BlockingQueue.put("a");
BlockingQueue.put("b");
BlockingQueue.put("c");
//一直阻塞,添加不了
//BlockingQueue.put("d");
System.out.println(BlockingQueue.take());
System.out.println(BlockingQueue.take());
System.out.println(BlockingQueue.take());
//一直阻塞,没有这个元素
//System.out.println(BlockingQueue.take());
}
/**
* arrayBlockingQueue 队列超时退出
* put、take
*/
public static void Test04() throws InterruptedException {
ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);
BlockingQueue.offer("a");
BlockingQueue.offer("b");
BlockingQueue.offer("c");
//等待超时1秒就退出
BlockingQueue.offer("d",1, TimeUnit.SECONDS);
System.out.println("------------------------");
System.out.println(BlockingQueue.poll());
System.out.println(BlockingQueue.poll());
System.out.println(BlockingQueue.poll());
//等待超时1秒就退出
BlockingQueue.poll(1,TimeUnit.SECONDS);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现