ArrayBlockingQueue:数组实现的线程安全的有界的阻塞队列。
线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问。而有界,则是指ArrayBlockingQueue对应的数组是有界限的。 阻塞队列,是指多线程访问竞争资源时,当竞争资源已被某线程获取时,其它要获取该资源的线程需要阻塞等待;数组的容量是创建ArrayBlockingQueue时指定的
package com.neo.study001.radio13;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
/**
* @author liyy
* @date 2020/4/26 23:30
*/
public class UseArrayBlockingQueue {
public static void main(String[] args) throws Exception{
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(3);
queue.offer("1");
queue.offer("2");
queue.offer("3");
queue.offer("4");
System.out.println(queue.size());
System.out.println(queue.offer("5",2, TimeUnit.SECONDS));
System.out.println(queue.add("5"));
}
}
会发现当定义了大小是3时,只能加入3个字符串,使用重载的offer方法,会在定义的2秒后输出一个false,代表已经添加满了
如果直接使用add()方法添加,会抛出异常
Exception in thread "main" java.lang.IllegalStateException: Queue full
at java.util.AbstractQueue.add(AbstractQueue.java:98)
at java.util.concurrent.ArrayBlockingQueue.add(ArrayBlockingQueue.java:312)
at com.neo.study001.redio13.UseArrayBlockingQueue.main(UseArrayBlockingQueue.java:19)