BlockingQueue 学习
作者:互联网
/** * * * BlockingQueue 学习 * BlockingQueue 继承自Collection * 意思是 阻塞 和 队列 * 阻塞就是等待的意思,当前线程就等待了,放不进去队列就阻塞,取不去来就阻塞 * 队列的意思就是:先进先出啊。 * 四组API的使用 * * * */ public class Test { public static void main(String[] args) throws InterruptedException{ Test test = new Test(); test.test4(); } /** * * 抛出异常的方式 * */ public void test1(){ //队列的大小 只能放3个 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: Queue full // System.out.println(blockingQueue.add("d")); System.out.println("=================="); System.out.println(blockingQueue.remove()); //检测队首元素 这里抛出异常的时候测试的时候使用 这个方法 System.out.println("目前队首的元素是"+blockingQueue.element()); System.out.println(blockingQueue.remove()); System.out.println(blockingQueue.remove()); // java.util.NoSuchElementException //System.out.println(blockingQueue.remove()); } /** * * 这里不抛出异常 * */ public void test2(){ //队列的大小 只能放3个 ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(3); System.out.println(arrayBlockingQueue.offer("a")); System.out.println(arrayBlockingQueue.offer("b")); //这里返回的是true System.out.println(arrayBlockingQueue.offer("c")); //这里返回的是false System.out.println(arrayBlockingQueue.offer("d")); System.out.println("========================="); System.out.println(arrayBlockingQueue.poll()); //检测队首元素 这里不抛出异常的时候测试的时候使用 这个方法 System.out.println("目前队首的元素是"+arrayBlockingQueue.peek()); System.out.println(arrayBlockingQueue.poll()); //这里返回的是 c System.out.println(arrayBlockingQueue.poll()); //这里不抛出异常,直接返回的是null System.out.println(arrayBlockingQueue.poll()); } //等待阻塞之一:一直阻塞 public void test3() throws InterruptedException{ //队列的大小 只能放3个 ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(3); arrayBlockingQueue.put("a"); //没有返回值 arrayBlockingQueue.put("b"); arrayBlockingQueue.put("c"); // arrayBlockingQueue.put("d"); //因为队列里面只能放3个元素,当前线程就一直阻塞在这里了 System.out.println("队列中放完了"); System.out.println("=================="); arrayBlockingQueue.take(); //没有返回值 arrayBlockingQueue.take(); arrayBlockingQueue.take(); arrayBlockingQueue.take(); //因为队列中只有三个元素,取第四个的时后取不到当前线程就一直阻塞在这里了 System.out.println("从队列中取完了"); } // 当前线程阻塞几秒 public void test4() throws InterruptedException{ //队列的大小 只能放3个 ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(3); //放的时候最多等两秒 如果两秒没有放进去当前线程就推出 arrayBlockingQueue.offer("a",2, TimeUnit.SECONDS); arrayBlockingQueue.offer("b",2, TimeUnit.SECONDS); arrayBlockingQueue.offer("c",2, TimeUnit.SECONDS); // arrayBlockingQueue.offer("d",2, TimeUnit.SECONDS); System.out.println("队列中放完了"); System.out.println("================================="); arrayBlockingQueue.poll(2,TimeUnit.SECONDS); //取的时候取等两秒,如果取不到当前线程就退出 arrayBlockingQueue.poll(2,TimeUnit.SECONDS); arrayBlockingQueue.poll(2,TimeUnit.SECONDS); arrayBlockingQueue.poll(2,TimeUnit.SECONDS); System.out.println("队列中取完了"); } }
标签:队列,System,学习,println,arrayBlockingQueue,blockingQueue,BlockingQueue,out 来源: https://www.cnblogs.com/gaohq/p/15172478.html