thread基础

1. 实现多线程1.1 创建多线程的方式1.1.1 实现Runnable接口12345678public class RunnableThread implements Runnable { @Override public void run() { System.out.println('用实现Runnable接口实现线程'...

并发编程

threadlocal详解

0. 简介: ThreadLocal 并不解决线程间共享数据的问题 ThreadLocal 通过隐式的在不同线程内创建独立实例副本避免了实例线程安全的问题;每个线程持有一个 Map 并维护了 ThreadLocal 对象与具体实例的映射,该 Map 由于只被持有它的线程访问,故不存在线程安全以及锁的问题 ThreadLocalMap 的 Entry 对 ThreadLocal 的引用为弱引...

并发编程

AQS应用

1. CountDownLatchlatch 的中文意思是门栓、栅栏,CountDownLatch 基于 AQS 的共享模式的使用 1.1 使用例子 假设我们有 N ( N > 0 ) 个任务,那么我们会用 N 来初始化一个 CountDownLatch,然后将这个 latch 的引用传递到各个线程中,在每个线程完成了任务后,调用 latch.countDown() 代表完成了一个任务...

并发编程

阻塞队列BlockingQueue

1. BlockingQueue由来在生产者-消费者模式中,为了使生产者消费者解藕,需要一个存放元素的容器,使生产者可以只关心往队列里添加元素下,消费者只关系从队列中取出元素进程处理。 而且这个队列必须要满足两点: 线程安全 缓冲池空了,我们需要阻塞消费者,唤醒生产者;当缓冲池满了,我们需要阻塞生产者,唤醒消费者 JDK 为此设计了 阻塞队列(BlockingQueue),并提供了几个基...

并发编程

AQS详解

1. AQS简介 抽象同步队列,实现同步器的基础组件,如常用的ReentrantLock、Semaphore、CountDownLatch等。 AQS定义了一套多线程访问共享资源的同步模板,解决了实现同步器时涉及的大量细节问题,能够极大地减少实现工作。 2. 结构继承关系AQS属性AQS重要方法Node属性ConditionObject属性ConditionObject重要方法123456...

并发编程

线程池详解

1. 什么是线程池2. ThreadPoolExecutor源码2.1 继承关系 Executorexecute(Runnable): 用来执行传进去的任务ExecutorServicesubmit()、invokeAll()、invokeAny() 以及shutDown() 等AbstractExecutorService基本实现了ExecutorSe...

并发编程

CopyOnWriteArrayList源码解析

1. CopyOnWriteArrayList简介 在JDK1.5 之前,如果想要使用并发安全的 List 只能选择 Vector。而 Vector 是一种老旧的集合,已经被淘汰。Vector 对于增删改查等方法基本都加了 synchronized,这种方式虽然能够保证同步,但这相当于对整个 Vector 加上了一把大锁,使得每个方法执行的时候都要去获得锁,导致性能非常低下。 JDK1.5 ...

Collection

ConcurrentHashMap源码解析

1. ConcurrentHashMap1.71. 存储结构 Segment 数组 + HashEntry 数组 + 链表 2. 初始化方法初始化逻辑无参构造有参构造 必要参数校验。 校验并发级别 concurrencyLevel 大小,如果大于最大值,重置为最大值。无参构造默认值是 16. 寻找并发级别 concurrencyLevel 之上最近的 2 的幂次方值,作为初始化容量大小,...

Collection

Hashmap源码解析

1. 简介 HashMap 主要用来存放键值对 ,它基于哈希表的 Map 接口实现,是常用的 Java 集合之一,是非线程安全的。 HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”...

Collection

LinkedHashMap源码解析

1. 简介LinkedHashMap 是 Java 提供的一个集合类,它继承自 HashMap,并在 HashMap 基础上维护一条双向链表,使得具备如下特性: 支持遍历时会按照插入顺序有序进行迭代。 支持按照元素访问顺序排序,适用于封装 LRU 缓存工具。 因为内部使用双向链表维护各个节点,所以遍历时的效率和元素个数成正比,相较于和容量成正比的 HashMap 来说,迭代效率会高很多。 ...

Collection
12345

本站由 卡卡龙 使用 Stellar 1.27.0 主题创建

本站访问量 次. 本文阅读量 次.