Java
Java
街角下的蚂蚁
路漫漫其修远兮,吾将上下而求索!
展开
-
Java锁机制之CAS(二)
导语上一篇提到了在多核CPU环境下怎么实现CAS的原子性操作。本节将列举CAS在Java中的具体应用。CAS实现锁的原理CAS的实现逻辑是将内存位置处的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。若不相等,则不做任何操作。基于这个理念,试想,在并发场景中,如果我们在做CAS操作的时候不成功,那么可以一直循环执行,直到最终成功返回为止。这样没有加锁执行,线程不会阻塞影响性能,只会耗费更多的CPU资源。AtomicLong为列AtomicLong.java// 获取Un.原创 2020-08-15 22:23:15 · 128 阅读 · 0 评论 -
Java锁机制之CAS(一)
导语CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制。CAS 操作包含三个操作数:内存位置、预期数值和新值。CAS的实现逻辑是将内存位置处的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。若不相等,则不做任何操作。简介在 Java 中,Java 并没有直接实现 CAS,CAS 相关的实现是通过 C++ 内联汇编的形式实现的。Java 代码需通过 JNI 才能调用。接下来将会再介绍一点其他的背景知识。有这些背景知识,才能更好的理解后续的内容。原创 2020-08-15 22:22:10 · 279 阅读 · 0 评论 -
LinkedBlockingQueue 深入分析
导语LinkedBlockingQueue是一个单向链表实现的阻塞队列,先进先出的顺序。支持多线程并发操作。相比于数组实现的ArrayBlockingQueue的有界,LinkedBlockingQueue可认为是无界队列。多用于任务队列。分析要点是否线程安全?数据结构是怎样的?怎么实现阻塞和非阻塞插入和获取元素?怎么实现插入和获取元素平衡的?应用与哪些场景?深入剖析成员变量// 队列的总容量private final int capacity;// 元素的总个数pri.原创 2020-08-15 22:19:43 · 399 阅读 · 0 评论 -
ArrayBlockingQueue 深入分析
导语ArrayBlockingQueue 是一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。新元素插入到队列的尾部,队列检索操作则是从队列头部开始获得元素。分析要点是否线程安全?数据结构是怎样的?怎么实现阻塞和非阻塞插入和获取元素?怎么实现插入和获取元素平衡的?应用与哪些场景?深入剖析成员变量// 元素存放的对象,可以看出其数据结构仍然为数组final Object[] items;// 获取下一个元素的数组下标int takeIndex.原创 2020-08-15 22:18:25 · 389 阅读 · 0 评论 -
Thread-线程中断机制(interrupt)
导语在线程的中断机制里面有三个比较相似的方法,分别是interrupt()、isInterrupted()、interrupted(),之前一直没有了解的很透彻,记录一下。Java的中断是一种协作机制。调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求线程自己在合适的时机中断自己。每个线程都有一个boolean的中断状态(这个状态不在Thread的属性上),interrupt方法仅仅只是将该状态置为true。方法对比方法描述interrupt(.原创 2020-08-15 22:17:00 · 565 阅读 · 0 评论 -
LinkedList深入分析
导语LinkedList集成AbstractSequentialList,实现了List,Deque,Cloneable,Serializable接口。AbstractSequentialList提供了骨干实现。Deque一个线性 collection,支持在两端插入和移除元素,定义了双端队列的操作。分析要点是否线程安全?数据结构是怎样的?怎么实现扩容?怎么实现插入和获取元素?应用与哪些场景?深入剖析构造函数...// 元素个数transient int size = 0.原创 2020-08-09 22:53:14 · 154 阅读 · 0 评论 -
ArrayList深入分析
导语ArrayList是我们在编程中经常用到的类,它实现了接口List,List接口继承了Collection接口。ArrayList使用非常广泛,在集合框架中举重轻重。分析要点是否线程安全?数据结构是怎样的?怎么实现扩容?怎么实现插入和获取元素?应用与哪些场景?深入剖析构造函数...// 成员变量transient Object[] elementData;...public ArrayList(int initialCapacity) { if (initia.原创 2020-08-04 23:48:58 · 138 阅读 · 0 评论 -
Java基础篇之ThreadPoolExecutor
导语使用线程池的好处是能够减少在创建和销毁线程上所花费的时间以及系统资源的开销,提升系统整体性能。那么线程池是怎么实现这一目标的呢?线程池的创建public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threa.原创 2020-08-02 17:05:49 · 258 阅读 · 0 评论