并发专题
每根头发都有名字
有空写着玩,加深下记忆
展开
-
理解和使用线程池
使用线程池有以下几个目的 A.线程是稀缺资源,不能频繁的创建。 B.解耦作用;线程的创建与执行完全分开,方便维护。 C.应当将其放入一个池子中,可以给其他任务进行复用。 线程池原理 核心的思想就是把宝贵的资源放到一个池子中;每次使用都从里面获取,用完之后又放回池子供其他人使用。 ThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建3种类型的Thre...原创 2020-02-07 06:25:14 · 164 阅读 · 0 评论 -
并发集合
并发集合 普通的List Set Map集合在并发环境下 遍历的过程中不容许更新操作(增删改) ConcurrentCollection(并发集合) 非阻塞式集合(Non-Blocking Collection)------>ConcurrentLinkedDeque 阻塞式集合(Blocking Collection)---------> LinkedBlockingDeque 非阻...原创 2020-02-07 05:17:24 · 193 阅读 · 0 评论 -
锁
锁 CAS AQS子类定义为非公共内部帮助器类(私有的内部类继承AQS),写锁的时候的一个帮助器,提供获取锁和是释放锁的功能.模板。 acquire(int arg) 以独占模式获取对象,忽略中断。 acquireShared(int arg) 以共享模式获取对象,忽略中断。 tryAcquire(arg) 试图在独占模式下获取对象状态(自旋的时候)。 try...原创 2020-02-07 02:43:34 · 69 阅读 · 0 评论 -
CAS和AQS
CAS compareAndSet compareAndSwap 一种无锁原子算法,乐观锁 版本控制 原值 , 预期的值 , 要改变成的那个值 过程是这样:它包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做两个更新,则当前线程则什么都不做。最后,CAS 返回当前V的...原创 2020-02-06 00:43:13 · 106 阅读 · 0 评论 -
单例模式三种实现方式
单例模式 单例模式即实例化对象的过程有且仅有一次 单例模式的分类 饿汉模式 public class HungerySingleton { //加载的时候就产生的实例对象 private static HungerySingleton instance=new HungerySingleton(); private HungerySingleton(){ } } ...原创 2020-02-05 23:03:36 · 107 阅读 · 0 评论 -
Volatile关键字实现原理
Volatile关键字实现原理 1、认识volatile关键字 程序举例 用一个线程读数据,一个线程改数据 存在数据的不一致性 2、机器硬件CPU与JMM (1)CPU Cache模型 程序的局部执行原理 (2)CPU缓存的一致性问题 解决方案: 1)总线加锁(粒度太大) 2)MESI() a. 读操作:不做任何事情,把Cache中的数据读到寄存器 b. 写操作:发出信号通知其他的CPU讲改...原创 2020-02-05 17:55:47 · 123 阅读 · 0 评论 -
Synchronized初步认识
Synchronized 概念 是利用锁的机制来实现同步的。 锁机制有如下两种特性: 互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。 可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的(即在获得锁时应获得最新共享变量的值...原创 2020-02-03 01:31:41 · 97 阅读 · 0 评论 -
JAVA内存模型->JVM基础了解
JVM结构 主要有三部分构成: 一,classload(类加载器) 二,运行时数据区 三,引擎 classload(类加载器) Java是运行在Java的虚拟机(JVM)中的,但是它是怎么就运行在JVM中了呢?我们在IDE中编写的Java源代码被编译器编译成.class的字节码文件。然后由我们得ClassLoader负责将这些class问价加载到JVM中去执行。 JVM中提供了三层的ClassLo...原创 2020-01-11 04:08:54 · 267 阅读 · 0 评论