
JAVA并发编程
解析JAVA并发编程方面的相关技术要点,源码解析以及相关使用示例
KevinBrain
热爱编程!热爱生活!代码改变世界!一枚喜欢研究各种代码技术,对计算机技术充满好奇心的技术宅。
展开
-
源码| Copy-On-Write容器
Copy-On-Write容器1. COW思想这里的COW是Copy-On-Write的简称,即写时复制,是一种用于程序设计中的优化策略。1.1 COW原理COW的基本思路:当读取共享数据时,直接读取,不需要有其他操作(比如阻塞等待、复制等)。当写共享数据时,将旧数据复制出来一份作为新数据,只修改新数据,修改完新数据之后将新数据的引用赋值给原来数据的引用。在整个写数据的过程中,所有读取共享数据的操作都是读的旧数据。COW容器只有写操作与写操作之间是互斥的,读读和读写都不互斥。原创 2020-08-12 23:35:26 · 234 阅读 · 0 评论 -
源码| 线程池的实现原理
线程池的实现原理一.概述线程池,顾名思义就是存放线程的池子,池子里存放了很多可以复用的线程。如果不用类似线程池的容器,每当我们需要执行用户任务的时候都去创建新的线程,任务执行完之后线程就被回收了,这样频繁地创建和销毁线程会浪费大量的系统资源。因此,线程池通过线程复用机制,并对线程进行统一管理,具有以下优点:降低系统资源消耗。通过复用已存在的线程,降低线程创建和销毁造成的消耗;提高响应速度。当有任务到达时,无需等待新线程的创建便能立即执行;提高线程的可管理性。线程是稀缺资源,如果无限原创 2020-08-04 00:32:44 · 197 阅读 · 0 评论 -
源码|AQS源码分析
AQS源码分析AbstractQueuedSynchronizer是Java并发包java.util.concurrent的核心基础组件,是实现Lock的基础。AQS实现了对同步状态的管理,以及对阻塞线程进行排队、等待通知等。1. AQS类结构属性// 属性private transient volatile Node head;// 同步队列头节点private transient volatile Node tail;// 同步队列尾节点private volatile int stat原创 2020-07-27 23:23:29 · 169 阅读 · 0 评论 -
java基础| 多线程基础八:线程池及使用
线程池 线程池就是一些线程的容器,这些线程的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。...原创 2020-05-31 21:43:42 · 308 阅读 · 0 评论 -
java基础| 多线程基础七:JUC工具包中的工具类
JUC是指java并发工具包java.util.concurrent包 JUC并发包中的工具类主要有CountDownLatch、CyclicBarrier、Semaphore、ConcurrentHashMap、BlockingQueue等。这些工具类在java1.5被引入。CountDownLatch countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器...原创 2020-05-30 16:18:34 · 384 阅读 · 0 评论 -
java基础| 多线程基础六:Condition接口分析和ThreadLocal类解析
ConditionJUC是指java并发包,全称是 java.util.concurrent 包 JUC提供了Lock可以方便的进行锁操作,但是有时候我们也需要对线程进行条件性的阻塞和唤醒,这时我们就需要condition条件变量,它就像是在线程上加了多个开关,可以方便的对持有锁的线程进行阻塞和唤醒。Condition主要是为了在J.U.C框架中提供和Java传统的监视器风格的wait,notify和notifyAll方法类似的功能。condition 是依赖于 Ree...原创 2020-05-28 16:29:24 · 630 阅读 · 0 评论 -
java基础| 多线程基础五:AQS详解
什么是AQS? AQS是一个同步器,在java中是AbstractQueuedSynchronizer的简称。AQS是一个FIFO功能的双向链表,是一个提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架。AQS为一系列同步器依赖于一个单独的volatile原子变量(state)的同步器提供了一个非常有用的基础。子类们必须定义改变state变量的protected方法,这些方法定义了state是如何被获取或释放的。 对state的操作是原子的,且不能被继承。所有...原创 2020-05-25 10:59:59 · 820 阅读 · 0 评论 -
java基础| 多线程基础四:显示锁详解
显示锁 只要实现了Lock接口的锁都叫显示锁。锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchroniz...原创 2020-05-21 22:17:48 · 280 阅读 · 0 评论 -
java基础| 多线程基础三:CAS原理和原子操作
CAS机制 CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。 CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。 更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。 synchornized(内置锁)从思想上来说是属于悲观锁,悲观地认为程序中的并发情况严重,所以使用数据之前先加锁即严防死守。而CAS机制属于乐观锁,乐观地认为程序中地并发情况不那么严重,所以让线...原创 2020-05-21 20:05:22 · 177 阅读 · 0 评论 -
java基础| 多线程基础二: synchronized底层原理解析
提要synchronized 是解决Java并发最常见的一种方法,也是最简单的一种方法。关键字 synchronized 可以保证在同一时刻,只有一个线程可以访问某个方法或者某个代码块。同时 synchronized 也可以保证一个线程的变化,被另一个线程看到(保证了可见性)。synchronized的作用主要有三个:确保线程互斥的访问代码 保证共享变量的修改能够及时可见(可见性) 可以阻止JVM的指令重排序 Java虚拟机中的同步(Synchronization)都是基于进入和退出...原创 2020-05-21 16:22:54 · 197 阅读 · 0 评论 -
java基础| 多线程基础一:并发编程基础
基本概念进程:是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程一般由程序、数据集合和进程控制块三部分组成。(程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块包含进程的描述信息和控制信息是进程存在的唯一标志。) 进程具有的特征: 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的; 并发性:任何进程都可以同其他进行一起...原创 2020-05-18 22:18:57 · 200 阅读 · 0 评论