![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码分析
文章平均质量分 54
一个欧维
我不懒!!!
展开
-
List线程安全问题
1. 发现问题List<Integer> list = new ArrayList<>();new Thread(() -> { for (int i = 0; i < 10000; i++) { list.add(1); }},"A").start();new Thread(() -> { for (int i = 0; i < 10000; i++) { list.add(1);原创 2022-04-21 23:09:15 · 500535 阅读 · 1 评论 -
LinkedList源码分析
1. 源码分析// LinkedList 源码// list中实际存储元素的个数transient int size = 0;// 头节点transient Node<E> first;// 尾节点transient Node<E> last;// 添加一个元素public boolean add(E e) { linkLast(e); return true;}//list尾插入 void linkLast(E e) {原创 2022-04-18 22:10:01 · 497040 阅读 · 0 评论 -
ArrayList源码分析
1. 源码分析// 默认大小private static final int DEFAULT_CAPACITY = 10;// 空数组 调用ArrayList构造方法并设置初始大小为0时使用private static final Object[] EMPTY_ELEMENTDATA = {};// 空数组 调用ArrayList构造方法 不设置初始大小时使用private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA原创 2022-04-17 00:01:41 · 494700 阅读 · 0 评论 -
ConcurrentLinkedQueue
ConcurrentLinkedQueue是一个无界的,线程安全的队列,遵循FIFO先进先出规则。当使用多线程访问需求时,该队列是一个不错的选择,和其他并发集合类似,它也不接受Null元素否则将抛出NullPointerException。//其offer方法的首行调用该方法检查空值。private static void checkNotNull(Object v) { if (v == null) throw new NullPointerException();}该原创 2021-09-15 11:22:57 · 273 阅读 · 0 评论 -
ArrayBlockingQueue
ArrayBlockingQueue是一个有界的队列,遵循先进先出规则,头部存放的永远是该队列中存储时间最长的元素,尾部是存储最短时间的元素。新元素从队列尾部进入,从头部取出元素。该队列一旦被创建,就无法改变其容量。 /** * Creates an {@code ArrayBlockingQueue} with the given (fixed) * capacity and default access policy. * * @param capac原创 2021-09-15 23:32:09 · 256 阅读 · 0 评论 -
LinkedBlockingQueue
LinkedBlockingQueue是一个可选是否有界的阻塞队列,由链表实现。同其他队列一样,它遵循先进先出(FIFO)规则,队头元素是队列中存储时间最长的元素,队尾是队列中存储时间最短的元素。元素从队头取出,从队尾插入。该队列拥有比ArrayBlockingQueue更高的吞吐量,但是在高并发情况下的可预测性能较差。LinkedBlockingQueue源码:/** Lock held by take, poll, etc */private final ReentrantLock takeL原创 2021-09-16 16:47:23 · 403 阅读 · 0 评论 -
PriorityQueue优先队列
PriorityQueue即优先队列,是一个无界限队列。基于优先级堆,使用平衡二叉堆实现,底层体现是数组。transient Object[] queue; // non-private to simplify nested class access引用java8源码中PriorityQueue的类注释来说:其队列中所有元素都按照它们的自然排序方法**(实现Comparable接口),或通过在创建对象时传入比较器(Comparator)**完成排序。但在两种方式同时存在的情况下:优先使用Compa原创 2021-09-06 17:46:16 · 152 阅读 · 0 评论