JUC并发编程学习笔记-10-阻塞队列BlockingQueue
2020-06-04 06:55
597 查看
1.抛出异常
import java.util.concurrent.ArrayBlockingQueue; public class bqTest { public static void main(String[] args) { //list //set test1(); } /* 抛出异常 */ public static void test1(){ //队列的大小 ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3); System.out.println(blockingQueue.add("a")); System.out.println(blockingQueue.add("b")); System.out.println(blockingQueue.add("c")); //java.lang.IllegalStateException抛出异常 //System.out.println(blockingQueue.add("d")); System.out.println(blockingQueue.element());//查看队首元素是谁 System.out.println(blockingQueue.remove()); System.out.println(blockingQueue.remove()); System.out.println(blockingQueue.remove()); //java.util.NoSuchElementException没有元素了 //System.out.println(blockingQueue.remove()); } }
2.有返回值,没有异常
import java.util.concurrent.ArrayBlockingQueue; public class bqTest { public static void main(String[] args) { //list //set test2(); } /* 有返回值没有异常 */ public static void test2(){ ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3); System.out.println(blockingQueue.offer("a")); System.out.println(blockingQueue.offer("b")); System.out.println(blockingQueue.offer("c")); System.out.println(blockingQueue.offer("d"));//false,不抛出异常 System.out.println("++++++++++++++++++++++++++++++++++++"); System.out.println(blockingQueue.peek());//查看队首元素是谁 System.out.println(blockingQueue.poll()); System.out.println(blockingQueue.poll()); System.out.println(blockingQueue.poll()); System.out.println(blockingQueue.poll());//null 不抛出异常 } }
3.等待阻塞,一直
import java.util.concurrent.ArrayBlockingQueue; public class bqTest { public static void main(String[] args) throws InterruptedException { //list //set test3(); } /* 等待,阻塞(一直) */ public static void test3() throws InterruptedException { //队列的大小 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());//没有这个元素,一直等待,阻塞 } /* 等待,阻塞(等待超时) */ }
4.等待,阻塞(等待超时)
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.TimeUnit; public class bqTest { public static void main(String[] args) throws InterruptedException { //list //set test3(); } /* 等待,阻塞(等待超时) */ public static void test3() throws InterruptedException { //队列的大小 ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3); blockingQueue.offer("a"); blockingQueue.offer("b"); blockingQueue.offer("c"); blockingQueue.offer("d",2, TimeUnit.SECONDS);//等待超过两秒就退出 System.out.println("==========="); System.out.println(blockingQueue.poll()); System.out.println(blockingQueue.poll()); System.out.println(blockingQueue.poll()); blockingQueue.poll(2,TimeUnit.SECONDS);//超过两秒就退出 } }
相关文章推荐
- JUC学习笔记三:AQS并发工具类;读写锁;阻塞队列
- 【高并发10】JUC组件扩展(FutureTask, Fork / Join 并行框架 ,阻塞队列BlockingQueue)
- JAVA并发编程学习笔记之CLH队列锁
- 学习java多线程的笔记3-使用BlockingQueue阻塞队列来模拟两个线程之间的通信
- 【Java并发】阻塞队列BlockingQueue和生产者-消费者模型笔记
- java并发编程学习: 阻塞队列 使用 及 实现原理
- JAVA并发编程学习笔记之CLH队列锁 (r)
- Java并发编程:阻塞队列BlockingQueue
- Java并发编程笔记 使用阻塞队列实现生产者-消费者模型
- 移动端并发编程基础篇-阻塞队列ArrayBlockingQueue&LinkedBlockingQueue
- JAVA并发编程学习笔记之MCS队列锁
- linux 系统编程-学习笔记10--进程间通信--管道/FIFO/消息队列/
- Java多线程高并发学习笔记——阻塞队列
- 并发编程学习笔记之原子变量与非阻塞同步机制(十二)
- JAVA并发编程学习笔记之MCS队列锁
- 并发编程学习笔记之原子变量与非阻塞同步机制(十二)
- 并发编程实战学习笔记(十一)-原子变量与非阻塞同步机制
- 并发编程 - 阻塞队列BlockingQueue
- 学习笔记(02):Java并发编程精讲-线程的同步异步,阻塞非阻塞
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题