对DDD的总结

前言

第一次听到DDD,还是通过技术群内部大佬们的闲聊得知。本着求知的心态,在网上简单看了一下DDD相关的知识。晦涩的术语,抽象的描述,看了半天不禁感叹,大佬们之间的聊天话题,果然不是我等咸鱼可以企及的。

【线程池】-- ThreadPoolExecutor源码解析(下)(jdk1.8)

概述

​ 上一章我们主要通过execute()方法,来展开分析线程池的运作机制,这一章我们就来看看线程池中submit()这个具有返回值的方法是如何是实现的,又是如何获取返回值的。

【线程池】-- ThreadPoolExecutor源码解析(上)(jdk1.8)

概述

线程池就是一个缓存的概念,将使用完的线程放入到线程池中管理,这样有下一个任务需要执行时,直接从线程池中获取线程执行就行,避免重复的执行线程创建、销毁操作,做到线程复用,从而提高线程的利用率,还能通过线程池来对执行任务的线程进行控制,避免线程被滥用。

【阻塞队列】-- SynchronousQueue源码解析(jdk1.8)

概述

SynchronousQueue是一个没有数据缓冲的阻塞队列,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。SynchronousQueue中因为不存储元素,所以peek方法永远返回null。 SynchronousQueue支持公平策略。SynchronousQueue看似是阻塞队列中最简单的一种,却是几个解析中最复杂的一个。

【阻塞队列】-- DelayQueue源码解析(jdk1.8)

概述

DelayQueue是一个基于PriorityQueue优先级队列实现的有序的无界阻塞队列。放入队列的元素必须实现Delayed接口,其中的对象只能在其到期时才能从队列中取走。

【阻塞队列】-- PriorityBlockingQueue源码解析(jdk1.8)

概述

PriorityBlockingQueue一个无界的带有优先级的动态阻塞队列,插入队列的元素默认情况下采用自然顺序升序排列,如果用户传入了Comparator,那么使用传入的Comparator进行排序。PriorityBlockingQueue内部使用一把锁用于消费,当容量到达阈值时,会自动扩容,扩容时由volatile修饰的allocationSpinLock作为cas自旋锁的标识(保证扩容操作不会阻塞take操作)。

【阻塞队列】-- LinkedBlockingDeque源码解析(jdk1.8)

概述

LinkedBlockingDequeLinkedBlockingQueue不同,它是一个由链表组成的无界双端阻塞队列,生产消费用一把锁,头尾都可以生产消费元素,由于多了一个生产插入的入口,因此多线程情况下,入队的效率会提升一倍。

【阻塞队列】-- LinkedBlockingQueue源码解析(jdk1.8)

概述

LinkedBlockingQueue是由链表组成的单向无界阻塞(严格意义上来并不是无界限) 队列。与ArrayBlockingQueue 不同的是,LinkedBlockingQueue生产消费各用一把锁,生产用的是putLock,消费是takeLock,目的就是为了增大吞吐量,但是因为每个节点都是一个对象,所以比较耗费内存。

【阻塞队列】-- ArrayBlockingQueue源码解析(jdk1.8)

概述

ArrayBlockingQueue是由数组组成的一个单向有界阻塞队列。ArrayBlockingQueue内部只有一把锁ReentrantLock,通过ReentrantLockCondition来控制内部的生产与消费。ArrayBlockingQueue创建时必须指定容量,当队列满后会阻塞生产的线程,队列空时会阻塞消费的线程。

【阻塞队列】-- BlockingQueue总结(jdk1.8)

概述

BlockingQueue即是我们所说的阻塞队列,它是一个接口,继承自Queue接口。后面我们要讲的阻塞队列,都实现自该接口。包括:

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×