java并发编程
总结关于java并发编程的相关内容
Kevin_cai09
无情的bug maker
展开
-
JUC-LinkedBlockingDeque
和LinkedBlockQueue类似,LinkedBlockingDeque也是一个基于链表实现的队列,不过是双端队列,队列双端都可以做插入和移除操作,而且实现的是BlockingDeque接口而不是BlockingQeque接口,当然BlockingDeque还是继承自BlockingQeque。1. 主要成员 transient Node<E> first;// 头节点 transient Node<E> last;// 尾节点 private tra原创 2020-11-09 18:59:40 · 191 阅读 · 0 评论 -
JUC-LinkedBlockingQueue
LinkedBlockingQueue是一个基于链表实现的阻塞队列1. 成员节点类: static class Node<E> { E item;// 节点值 Node<E> next;// 后继指针 Node(E x) { item = x; } }成员: private final int capacity;// 链表容量 private final AtomicInteger count =原创 2020-11-09 17:42:55 · 167 阅读 · 0 评论 -
threadlocal
threadlocalthreadlocal为每一个线程单独创建一个变量副本,各个线程之间互不影响,可以在指定线程中存储数据,只有指定线程可以访问到1,基本操作public class ThreadLocalTest { static ThreadLocal<Integer> threadLocal = new ThreadLocal<>(); public static class Test implements Runnable{原创 2020-11-05 21:32:28 · 167 阅读 · 0 评论 -
JUC阻塞队列-ArrayBlockingQueue
ArrayBlockingQueue文章目录ArrayBlockingQueue1. 成员2. 基本操作2.1 构造方法2.2 入队2.3 出队3. 注意1. 成员ArrayBlockingQueue是基于数组这种数据结构实现的阻塞队列 final Object[] items;// 存放队列元素的数组 int takeIndex; // 指向出队元素的指针 int putIndex; // 入队指针 int count; // 队列元素数量阻塞队列实现的关键:一把锁原创 2020-11-03 21:36:06 · 151 阅读 · 0 评论 -
AQS-CountDownLatch&CyclicBarrier&Semaphore
AQS-CountDownLatch&CyclicBarrier&Semaphore文章目录AQS-CountDownLatch&CyclicBarrier&SemaphoreCountDownLatch源码分析Semaphore源码分析CyclicBarrier源码分析CountDownLatchCountDownLatch是JUC包下的一个基于AQS实现的并发工具类,利用他可以实现类似计数器的功能,比如有一个任务A,他要等待其他4个任务执行完毕之后才能执行,此时就可原创 2020-12-31 17:38:56 · 154 阅读 · 0 评论 -
java并发(二)synchronized和volatile
文章目录二,synchronized2.1 临界区2.2 竞态条件2.3 synchronized应用及原理2.3.1 synchronized应用2.3.2 synchronized原理Java对象头monitor2.4 synchronized优化2.4.1 轻量级锁2.4.2 重量级锁2.4.3 偏向锁三,volatile3.1 可见性3.2 原子性3.3 有序性3.3.1 指令重排序3.4...原创 2020-03-05 00:40:05 · 255 阅读 · 0 评论 -
java并发(一)进程和线程
一,进程和线程1.1 进程和线程1.1.1 进程程序由指令和数据组成,但这些指令要运行,数据要读写,都必须将指令加载到CPU,数据加载到内存,在指令运行过程中还需要用到磁盘,网络等设备,进程就是用来加载指令,管理内存,和管理IO的当一个程序运行,程序代码从磁盘加载到内存就相当于开启了一个进程进程相当于一个程序的实例1.1.2 线程一个进程中有一到多个线程一个线程就是一个指令流...原创 2020-03-05 00:25:45 · 351 阅读 · 2 评论 -
BlockingQueue
文章目录BlockingQueue简介LinkedBlockingQueue 源码分析底层数据结构原理LinkedBlockingQueue总结ArrayBlockingQueue源码分析原理ArrayBlockingQueue总结:BlockingQueue简介在Java中,BlockingQueue是一个接口,它的实现类有ArrayBlockingQueue、DelayQueue、 Lin...原创 2020-01-24 00:17:49 · 2672 阅读 · 0 评论 -
ThreadLocal源码分析
ThreadLocal源码分析文章目录ThreadLocal源码分析一,基本使用二,get / set / remove方法2.1 get方法2.2 set方法2.3 remove方法三,深入ThreadLocalMap四,执行流程总结五,内存泄漏问题一,基本使用Threadlocal的作用就是,为一个线程保存一个线程本地变量,该变量对该线程全局可知,其他线程无法干扰到该变量简单使用:...原创 2019-12-11 22:27:34 · 252 阅读 · 0 评论 -
并发(JMM综述)
JMM综述文章目录JMM综述一,内存模型产生背景二,内存模型概念2.1JMM组成部分2.2JVM内存操作的并发问题2.3内存交互操作流程三,JMM深入3.1原子性,可见性和有序性3.2happens-before3.3内存屏障3.3重排序四,volatile4.1volatile内存语义4.2volatile特性4.3volatile如何禁止指令重排序五,synchronize六,final一...原创 2019-12-10 14:13:29 · 326 阅读 · 0 评论 -
JVM(复习)java内存模型
JVM(复习)java内存模型文章目录JVM(复习)java内存模型1,并发编程中两个关键问题2,可见性,原子性和有序性2.1可见性2.2原子性2.3有序性3.内存屏障,指令重排和happens-before3.1内存屏障3.2指令重排序3.3happens-before4.volatile内存语义4.1 volatile特性4.2volatile如何禁止指令重排序5.锁的内存语义java...原创 2019-12-05 20:37:12 · 172 阅读 · 0 评论 -
并发编程 -- condition
一,condition简介任何一个java对象都拥有一对监视器方法(定义在Object上)主要包括:wait()/wait(long timeOut),notify(),notifyAll(),这些方法和synchronized配合实现等待/通知机制Condition接口也提供了类似的监视器方法,配合Lock实现等待/通知机制二,使用1.简单使用调用lock.newCondition(...原创 2019-07-03 16:37:35 · 152 阅读 · 0 评论 -
并发编程 -- 读写锁
文章目录一,读写锁简介二,ReentrantReadWriteLock简单使用1.使用ReentrantReadWriteLock维护一个线程不安全的hashmap2.原理解析读状态写状态读锁的获取和释放写锁的获取和释放一,读写锁简介之前说的ReentrantLock是一种排他锁,和synchronized类似,排他锁保证同一时刻只有一个线程进行访问,但是读写锁是维护一对读锁和写锁,读锁允许在...原创 2019-07-02 17:17:32 · 529 阅读 · 0 评论 -
并发编程 -- 原子操作原理
一,什么是原子操作?原子操作就是不可中断的一个或一系列的操作如何实现原子操作?首先处理器是能自动保证基本的内存操作的原子性,处理器自动保证从系统内存中读取或者写入一个字节是原子的,当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。但是对于复杂的内存操作处理器是不能自动保证其原子性的,比如跨总线宽度,跨多个缓存行和跨页表的访问。复杂内存操作实现原子性1.总线锁定当处理器A...原创 2019-07-02 14:48:58 · 433 阅读 · 0 评论 -
并发编程 -- java中的原子操作
文章目录一,java中的原子操作类型二,原子更新基本类型1.原子更新原理2.UnSafe作用使用3.CASCAS操作原理三,原子更新引用类型使用四,原子更新类中字段五,原子更新数组一,java中的原子操作类型jdk1.5开始提供了Atomic包,这个包中的原子操作类提供了一种用法简单,性能高效,线程安全的更新一个变量的方式二,原子更新基本类型该类用于原子的更新基本类型:AtomicIn...原创 2019-07-02 00:17:26 · 206 阅读 · 0 评论 -
并发编程 -- ReentrantLock
一,公平锁和非公平锁公平锁保证了在多线程环境下各个线程获取锁的顺序,先到的线程先获取到锁,也可以说,先对锁进行请求,请求等待时间最长的线程先获取到锁非公平锁在线程获取时,各线程获取到的概率是随机的如果要用同步队列器来讲的话,就是当第一个线程去请求获得锁时,如果成功获取到锁,则第二个线程只能进入同步队列等待第一个线程释放锁,然后在尝试获取锁,但是,如果此时来了第三个线程,如果是公平...原创 2019-06-21 16:03:15 · 167 阅读 · 0 评论 -
并发编程 -- 同步队列器
文章目录一,同步队列器1.核心数据结构节点基本结构:首节点设置尾节点设置二,独占式同步状态的获取和释放1.独占式获取同步状态(对中断不敏感)2.独占式响应中断获取3.释放4.总结三,共享式同步状态的获取和释放1.共享式获取同步状态2.释放昨天整理的不够清晰,今天重新看看了,再次总结了一篇一,同步队列器1.核心数据结构同步器依靠内部的同步队列(fifo的双向队列)来完成同步状态的管理当...原创 2019-06-20 16:09:46 · 219 阅读 · 0 评论 -
并发编程 -- lock和同步队列器初识
文章目录一,Lock接口1.与synchronized异同之处2.特性3.API表二,队列同步器1.简介2.使用访问或修改同步状态同步器可重写的方法同步器提供的模板方法独占锁实现实现分析锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,但是有些锁可以允许多个线程并发的访问共享资源(读写锁)一,Lock接口java se5前,java程序是依靠syn...原创 2019-06-20 00:16:49 · 283 阅读 · 0 评论 -
并发编程 -- ScheduledThreadPoolExecutor
文章目录ScheduledThreadPoolExecutor1.简介2.实现3.源码分析1.执行定时任务2.执行周期任务ScheduledThreadPoolExecutor1.简介ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,它主要用来在给定的延迟后运行任务,或者定期执行任务,类似Timer,但是其更强大更灵活,可以在构造函数指定多个对...原创 2019-06-17 13:37:36 · 255 阅读 · 0 评论 -
并发编程 -- ThreadLocal
文章目录一,ThreadLocal1.内部结构图2.内部核心机制二,深入ThreadLocal1.核心方法2.源码分析get()set()initialValue()remove()三,探究ThreadLocalMap的几个问题1.简介2.Hash冲突怎么解决解决方法3.内存泄漏问题如何避免内存泄漏一,ThreadLocalThreadLocal是线程变量,是一个以ThreadLocal对象...原创 2019-06-16 17:29:14 · 148 阅读 · 0 评论 -
并发编程 -- 线程池
文章目录一,线程池二,线程池工作及框架工作流程图:Executor框架1.两级调度模型2.框架结构框架结构框架成员框架工作流程三,线程池实现ThreadPoolExecutorFixedThreadPoolSingleThreadExecutorCachedThreadPool四,线程池关闭及监控1.线程池关闭2.监控线程池一,线程池java中的线程池是运用场景最多的并发框架,几乎所有需要异...原创 2019-06-16 01:47:52 · 197 阅读 · 0 评论 -
并发编程 -- volatile和synchronized
文章目录一,volatile1.作用2.原理二,synchronized1.synchronized基本用法修饰实例方法修饰静态方法修饰代码块2.浅谈synchronized原理synchronized执行过程对象头3.锁升级和对比偏向锁出现原因偏向锁获得锁过程偏向锁释放锁过程轻量级锁轻量级锁加锁轻量级锁释放锁一,volatile1.作用保证变量在多线程环境下的线程可见性,其他线程能感知到该...原创 2019-06-15 00:53:26 · 202 阅读 · 0 评论 -
并发编程 -- 线程间通信
文章目录一,什么是线程间的通信?二,线程通信应用1.volatile关键字2.synchronized关键字synchronized执行流程3.等待/通知机制4.等待超时机制一,什么是线程间的通信?线程间的通信说到底就是线程间的相互交互或者说是相互配合来完成既定的工作,如果多个线程间是独立的存在,那么多线程是毫无意义二,线程通信应用1.volatile关键字java支持多个线程同时访问同...原创 2019-06-14 15:42:26 · 231 阅读 · 0 评论 -
并发编程 -- 线程构建及线程状态
文章目录一.线程1.基本概念2.一个普通的java程序包括哪些线程二,创建线程1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法3.带有返回值的多线程实现 --- 实现callable接口4.基于线程池三,线程状态1.状态图2.过程一.线程1.基本概念现代操作系统调度的最小单元是线程,也叫轻量级进程一个进程里可以创建多个线程每一个线程都拥有各自的计数器,...原创 2019-06-14 00:01:56 · 241 阅读 · 0 评论