1.ArrayList的实现原理是怎样的呢? ------>例如:ArrayList本质是实现了一个可变长度的数组. 假如这个数组的长度为10,调用add方法的时候,下标会移动到下一位,当移动到70%左右的时候.会创建一个新数组,而这个新数组的长度变成2倍或3倍等等.将原来的数据复制到新数组中,新的内容会接着添加下一位.这就是ArrayList的实现原理.   2.CopyOnWriteArrayList的实现原理是怎样的呢? ------> 它的实现原理是在ArrayList的实现原理的基础…
一.简介 一个基于链接节点的无界线程安全队列.此队列按照 FIFO(先进先出)原则对元素进行排序.队列的头部 是队列中时间最长的元素.队列的尾部 是队列中时间最短的元素.新的元素插入到队列的尾部,队列获取操作从队列头部获得元素.当多个线程共享访问一个公共 collection 时,ConcurrentLinkedQueue 是一个恰当的选择.此队列不允许使用 null 元素. offer和poll offer(E e)           将指定元素插入此队列的尾部. poll()       …
1.Fork/Join框架有什么用呢? ------->Fork使用来切分任务,Join是用来汇总结果.举个简单的栗子:任务是1+2+3+...+100这个任务(当然这个任务的结果有好的算法去做,现在是用笨方法去计算这个结果). ------>适合在多核环境下,单核环境使用ForkJoin没什么意思.简单来说就是,一个任务切割成多个小的任务,这些小的任务分配给多个CPU去执行,从而达到提高CPU的执行率. public class Demo extends RecursiveTask { pr…
public class MyDataSource { private static LinkedList<Connection> pool = new LinkedList<>(); private static final int INIT_CONNECTIONS = 10; private static final String DRIVER_NAME = "com.mysql.jdbc.Driver"; private static final Stri…
一.阻塞队列 1.阻塞队列BlockingQueue ---->可以理解成生产者消费者的模式---->消费者要等待到生产者生产出来产品.---->而非阻塞队列ConcurrentLinkedQueue是非阻塞的,所以它取出来的时候可能为空. 2.注意使用BlockingQueue接口的时候. add方法和remove方法是会抛出异常的 put和take是阻塞的 Offer和Poll是有带返回值的 3.BlockingQueue的底层实现也是由wait,notifyAll,Conditio…
在前面介绍了java的多线程的基本原理信息:线程池的原理与使用 本文对这个java本身的线程池的调度器做一个简单扩展,如果还没读过上一篇文章,建议读一下,因为这是调度器的核心组件部分. 我们如果要用java默认的线程池来做调度器,一种选择就是Timer和TimerTask的结合:一个Timer为一个单独的线程,虽然一个Timer可以调度多个TimerTask,但是对于一个Timer来讲是串行的,至于细节请参看对应的那篇文章的内容,本文介绍的多线程调度器,也就是定时任务,基于多线程调度完成,当然你…
相信每个想深入了解多线程开发的Java开发者都会遇到CountDownLatch和CyclicBarrier,大家也在网上看到各种介绍原理,代码的,以及他们区别(应付面试)的,但是很少能讲清楚:他们到底有啥作用,怎么用,应用那些场景?为什么面试总会遇到?本文结合场景为大家加深理解. 理解: CountDownLatch是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行. CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行.…
1.StampedLock是做什么的? ----->它是ReentrantReadWriteLock 的增强版,是为了解决ReentrantReadWriteLock的一些不足.   2.ReentrantReadWriteLock有什么不足之处呢? ------>我们都知道,ReentrantReadWriteLock是读写锁,在多线程环境下,大多数情况是读的情况远远大于写的操作,因此可能导致写的饥饿问题.(换人话来说的话,读操作一直都能抢占到CPU时间片,而写操作一直抢不了)   3.为什…
一.简介 线程池在我们的高并发环境下,实际应用是非常多的!!适用频率非常高! 有过使用过Executors框架的朋友,可能不太知道底层的实现,这里就是讲Executors是由ThreadPoolExecutor实现的.好的,让我们来看看ThreadPollExcutor是怎样实现的呢? 如果你想了解ThreadPoolExecutor的话.可以先从它的构造方法看起. ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime,…
单例模式与多线程 立即加载/饿汉模式 立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接new实例化. 立即加载/饿汉模式实在调用方法前,实例已经被创建了 package Six; public class MyObject { // 立即加载方式==饿汉模式 private static MyObject myObject = new MyObject(); private MyObject() { } public static MyObject getInstance()…